2013-07-09 76 views
0

我有一個命令在一個mssql查詢需要以複雜的方式進行排序。我可以用光標解決這個問題,但它不是最佳解決方案。複雜的訂單由

我的select返回一個包含用戶進入和退出,進入時間以及退出時間的表格,我需要對最早的條目進行排序,然後是他的退出,然後是第二個最早的條目,然後是存在的人員等。例如

日期---- ----用戶動作(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

我想過使用的情況下,在訂單上,但我不知道如何有這個結果。

謝謝你的幫助,

+3

你目前的查詢? –

回答

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]; 
+0

對不起,我沒有迴應,我必須檢查你的解決方案,我很快會做 –