Intanto io cercherei di costruirla 'per gradi'.
Pensavo a come selezionare la data minore per ogni valore di Name.
codice:
SELECT Name, MIN(Date + Hour) as Data
FROM Tabella
GROUP BY Name
Non so però se è sufficiente oppure se andrebbero aggregate data e ora in una 'datetime'.... e non sono neanche sicuro che la MIN possa essere applicata così facilmente alle date.
Comunque trovate quelle poi puoi fare una JOIN con la stessa tabella, tenendo di conto i record ricavati sopra e impostando relativamente a quelli la clausola WHERE.
Qua sotto ho scritto una schifezza assurda senza molto senso... però forse può aiutare 
codice:
SELECT T1.* FROM Tabella T1
LEFT JOIN (SELECT Name, Date, Hour, MIN(Date + Hour) T2 ON T2.Name = T1.ID
WHERE T1.Date >= DATEADD(hh, 1, T2.Date)
AND T1.Hour >= DATEADD(hh, 1, T2.Hour)
In pratica mi creerei la tabella T2 contente i valori minimi per data e ora associati ad ogni valore di Name.
La mando in Left Join con la tabella principale T1, utilizzando dei criteri che non si verificheranno mai; quindi otterrò come risultato solo tutti i valori della tabella T1 (infatti seleziono solo T1.*), esclusi quelli con data e ora differenti per meno di un'ora (calcolata con la DateAdd, sperando che sia Hour che Date siano di tipo Data e non delle stringhe, altrimenti vanno convertite). La differenza di un'ora l'ho calcolata rispetto aii valori ricavati in T2, che anche se non visualizzata o utilizzata nella select viene comunque creata e vista.
E' un marchingegno molto brutto e macchinoso.... inoltre non sono sicuro di come ho unito le due TABELLE, quindi potresti avere risultati inaspettati.
Fai delle prove a fai sapere