是否可以在select语句中使用多个order by子句?我可以这样做吗?
SELECT TOP(5) * FROM [Db].[dbo].[Schedules]
where (datepart(hour, [Arrival]) >= datepart(hour, getdate()))
order by abs( (datepart(hour, [Arrival]) - datepart(hour, getdate()))*60 + datepart(minute, [Arrival]) - datepart(minute, getdate()))
order by [Arrival]
我需要二阶的原因是确保在递增的到达时间内返回记录。
TIA。
答案 0 :(得分:4)
不要重复两次ORDER BY。只需用逗号分隔您的物品即可。
SELECT TOP(5) *
FROM [Db].[dbo].[Schedules]
where (datepart(hour, [Arrival]) >= datepart(hour, getdate()))
order by abs( (datepart(hour, [Arrival]) - datepart(hour, getdate()))*60 + datepart(minute, [Arrival]) - datepart(minute, getdate())),
[Arrival]
答案 1 :(得分:3)
使用逗号分隔列表:
SELECT
TOP(5) *
FROM
[Db].[dbo].[Schedules]
where
(datepart(hour, [Arrival]) >= datepart(hour, getdate()))
order by
abs(
(datepart(hour, [Arrival]) - datepart(hour, getdate()))*60 + datepart(minute, [Arrival]) - datepart(minute, getdate())
),
[Arrival]
答案 2 :(得分:1)
基本上按堆排序。
因此,如果您有order by duration, arrival
之类的子句,SQL将首先尝试按持续时间排序,然后按到达每个持续时间值。