【发布时间】:2012-02-01 22:54:02
【问题描述】:
对于您的 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 AM,我想选择 2 条记录前后最接近现在的时间。结果应返回 ID 为 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
返回之前和之后的记录。我尝试在两个语句上使用联合,但这需要删除第一个 order by 子句,这会使我的查询条件无效。
任何想法都会有所帮助,谢谢。
【问题讨论】: