复杂的订单

时间:2013-07-09 09:43:51

标签: sql-server select sql-order-by case

我在mssql查询中有一个订单,需要以复杂的方式进行排序。我可以使用游标解决这个问题,但它不是最佳解决方案。

我的选择返回一个表,其中包含用户进入和退出,进入时间和退出时间,我需要对最早的条目进行排序,然后退出,然后是第二个最早的条目,然后是存在的人等,例如

date ---- user ---- action(1表示入口2正在退出)

0622 ---- 4 --------- 1

0627 ---- 4 --------- 2

0623 ---- 1 --------- 1

0624 ---- 1 --------- 2

0624 ---- 3 --------- 1

0630 ---- 3 --------- 2

0701 ---- 4 --------- 1

0703 ---- 4 --------- 2

我考虑过在订购时使用案例,但我不知道如何得到这个结果。

感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

这是我的解决方案:

select
    your_table.[date],
    your_table.[user],
    your_table.[action]
from your_table
order by
    (case when your_table.[action]=1 then your_table.[date] else (select max(t.[date]) from your_table t where t.[action]=1 and t.[user]=your_table.[user] and t.[date]<=your_table.[date]) end),
    your_table.[user],
    your_table.[action];