TSQL订购跨越午夜

时间:2015-10-06 09:53:22

标签: tsql time-series

如果在午夜过后,我根据到达时间的出发时间尝试订购TSQL表时遇到问题。

正如您所看到的那样,我按时间列排序最早到最新,但左侧有一个标志 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行的午夜

非常感谢任何帮助,非常感谢

1 个答案:

答案 0 :(得分:2)

您可以使用CASE之类的:

<强> SQLFiddleDemo

SELECT *
FROM your_table
ORDER BY
  CASE 
     WHEN [time] >= 1200 AND [time] <=2359 THEN 0
     ELSE 1
  END ASC
  ,[time]

您可以根据需要设置起始[time] >=1200,例如1800