Я бы подошел к этому как:
select t.*
from (select t.*,
row_number() over (partition convert(date, datecol), datepart(hour, datecol), datepart(minute, datecol) / 2
order by datecol
) as seqnum
from t
) t
where seqnum = 1;
. partition by
разбивает данные на группы по две минуты каждая (это делает / 2
).Затем логика возвращает первую запись в каждой группе.