Для вас гуру T-SQL:
У меня есть следующая таблица:
ID Arrival
1 06:16:00
2 06:17:00
3 07:19:00
4 08:21:00
5 10:22:00
6 13:21:00
7 20:22:00
Скажите, что время в настоящее время 08:00, и я хочу выбрать 2 записи до и после записи с ближайшим временем к настоящему времени. Результат должен возвращать записи с идентификаторами 2,3,4,5 и 6.
Получение записей до и после записи с ID = 4 не вызывает затруднений, но до сих пор я не могу понять, как вернуть полный набор как часть одного и того же запроса. У меня есть два выбранных утверждения:
SELECT TOP(2) * FROM Schedules
where (datepart(hour, Arrival) - datepart(hour, getdate()))*60 + datepart(minute, Arrival) - datepart(minute, getdate()) < 0
order by (datepart(hour, Arrival) - datepart(hour, getdate()))*60 + datepart(minute, Arrival) - datepart(minute, getdate())
SELECT TOP(2) * FROM Schedules
where (datepart(hour, Arrival) - datepart(hour, getdate()))*60 + datepart(minute, Arrival) - datepart(minute, getdate()) >= 0
order by (datepart(hour, Arrival) - datepart(hour, getdate()))*60 + datepart(minute, Arrival) - datepart(minute, getdate()) asc
, которые возвращают записи до и после. Я попытался использовать объединение в обоих операторах, но для этого необходимо удалить первый заказ по предложению, что делает недействительными мои критерии запроса.
Любые идеи помогут, спасибо.