Вот запрос на основе оконной функции, который для каждого дня в вашем наборе данных даст вам две записи: последнюю запись в 6-часовом интервале и последнюю запись в 15-часовом интервале:
SELECT *
FROM (
SELECT
t.*,
ROW_NUMBER() OVER(
PARTITION BY YEAR(SnapshotDate), MONTH(SnapshotDate), DAY(SnapshotDate), DATEPART(hh, SnapshotDate)
ORDER BY SnapshotDate DESC
) rn
FROM mytable
WHERE DATEPART(hh, SnapshotDate) IN (6, 15)
) WHERE rn = 1
Если вы просто хотите получить запись с наибольшим временем в 6-часовом интервале и запись с наибольшим временем в 15-часовом интервале по всей таблице (а не ежедневно), то вы можете просто удалить предложение PARTITION
:
SELECT *
FROM (
SELECT
t.*,
ROW_NUMBER() OVER(ORDER BY SnapshotDate DESC) rn
FROM mytable
WHERE DATEPART(hh, SnapshotDate) IN (6, 15)
) WHERE rn = 1