跨越午夜的 SQL 排序
TSQL Ordering spanning over midnight
我在尝试根据出发时间到到达时间订购 TSQL table 时遇到问题,如果它超过午夜的话。
如您所见,我按时间列从早到晚排序,但左侧 location_type 下方有一个标志,表明第一个离开是 LO 行。所以它应该从这里开始到 LT 行结束。
╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║ location_type nlcdesc arrival pass departure time ║
╠══════════════════════════════════════════════════════════════════════════════════════════════╣
║ LI WILLESDEN BRENT SDGS (FL) 0110 0110 NULL 0110 ║
║ LI WEST LONDON JN NULL 0204 NULL 0204 ║
║ LI NORTH JUNCTION NULL 0322 NULL 0322 ║
║ LI RUGBY TRENT VALLEY JUNCTION NULL 0405 NULL 0405 ║
║ LT SPEKE JN 0430 NULL NULL 0430 ║
║ LO LIVERPOOL GARSTON FRTLNR DEPOT NULL NULL 2153 2153 ║
║ LI ACTON BRIDGE NULL 2223 NULL 2223 ║
║ LI STAFFORD NULL 2255 NULL 2255 ║
║ LI CHANNELSEA JN NULL 2331 NULL 2331 ║
║ LI DAGENHAM DOCK NULL 2355 NULL 2355 ║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝
所以我希望结果看起来像这样
╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║ location_type nlcdesc arrival pass departure time ║
╠══════════════════════════════════════════════════════════════════════════════════════════════╣
║ LO LIVERPOOL GARSTON FRTLNR DEPOT NULL NULL 2153 2153 ║
║ LI ACTON BRIDGE NULL 2223 NULL 2223 ║
║ LI STAFFORD NULL 2255 NULL 2255 ║
║ LI CHANNELSEA JN NULL 2331 NULL 2331 ║
║ LI DAGENHAM DOCK NULL 2355 NULL 2355 ║
║ LI WILLESDEN BRENT SDGS (FL) 0110 0110 NULL 0110 ║
║ LI WEST LONDON JN NULL 0204 NULL 0204 ║
║ LI NORTH JUNCTION NULL 0322 NULL 0322 ║
║ LI RUGBY TRENT VALLEY JUNCTION NULL 0405 NULL 0405 ║
║ LT SPEKE JN 0430 NULL NULL 0430 ║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝
如您所见,它从标有 LO 的出发行开始,以标有 LT 的到达行结束。跨越午夜 2355 到 0110 行
非常感谢任何帮助,非常感谢
您可以使用 CASE
如:
SELECT *
FROM your_table
ORDER BY
CASE
WHEN [time] >= 1200 AND [time] <=2359 THEN 0
ELSE 1
END ASC
,[time]
您可以根据需要设置起始 [time] >=1200
例如 1800
。
我在尝试根据出发时间到到达时间订购 TSQL table 时遇到问题,如果它超过午夜的话。
如您所见,我按时间列从早到晚排序,但左侧 location_type 下方有一个标志,表明第一个离开是 LO 行。所以它应该从这里开始到 LT 行结束。
╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║ location_type nlcdesc arrival pass departure time ║
╠══════════════════════════════════════════════════════════════════════════════════════════════╣
║ LI WILLESDEN BRENT SDGS (FL) 0110 0110 NULL 0110 ║
║ LI WEST LONDON JN NULL 0204 NULL 0204 ║
║ LI NORTH JUNCTION NULL 0322 NULL 0322 ║
║ LI RUGBY TRENT VALLEY JUNCTION NULL 0405 NULL 0405 ║
║ LT SPEKE JN 0430 NULL NULL 0430 ║
║ LO LIVERPOOL GARSTON FRTLNR DEPOT NULL NULL 2153 2153 ║
║ LI ACTON BRIDGE NULL 2223 NULL 2223 ║
║ LI STAFFORD NULL 2255 NULL 2255 ║
║ LI CHANNELSEA JN NULL 2331 NULL 2331 ║
║ LI DAGENHAM DOCK NULL 2355 NULL 2355 ║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝
所以我希望结果看起来像这样
╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║ location_type nlcdesc arrival pass departure time ║
╠══════════════════════════════════════════════════════════════════════════════════════════════╣
║ LO LIVERPOOL GARSTON FRTLNR DEPOT NULL NULL 2153 2153 ║
║ LI ACTON BRIDGE NULL 2223 NULL 2223 ║
║ LI STAFFORD NULL 2255 NULL 2255 ║
║ LI CHANNELSEA JN NULL 2331 NULL 2331 ║
║ LI DAGENHAM DOCK NULL 2355 NULL 2355 ║
║ LI WILLESDEN BRENT SDGS (FL) 0110 0110 NULL 0110 ║
║ LI WEST LONDON JN NULL 0204 NULL 0204 ║
║ LI NORTH JUNCTION NULL 0322 NULL 0322 ║
║ LI RUGBY TRENT VALLEY JUNCTION NULL 0405 NULL 0405 ║
║ LT SPEKE JN 0430 NULL NULL 0430 ║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝
如您所见,它从标有 LO 的出发行开始,以标有 LT 的到达行结束。跨越午夜 2355 到 0110 行
非常感谢任何帮助,非常感谢
您可以使用 CASE
如:
SELECT *
FROM your_table
ORDER BY
CASE
WHEN [time] >= 1200 AND [time] <=2359 THEN 0
ELSE 1
END ASC
,[time]
您可以根据需要设置起始 [time] >=1200
例如 1800
。