我在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
我考虑过在订购时使用案例,但我不知道如何得到这个结果。
感谢您的帮助,
答案 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];