2017-08-02 63 views
0

我們的數據存在一些錯誤,我們試圖從數據庫中提取所有錯誤記錄。見下面的例子:SQL查詢檢索狀態發生變化的記錄

select * from students where studentID = 555 order by TimeStamp desc 

StudentID StatusID Status      TimeStamp 
555   2   Registered for Subject A 2017-08-01 01:00:00 
555   3   Passed Subject A   2017-07-30 01:00:00 
555   2   Registered for Subject A 2017-05-10 01:00:00 
555   1   New Student     2017-05-01 01:00:00 

對於一個學生StudentID = 555,他已經通過主題A(見第2行),這應該是最後的狀態,但有人手動去,並更新了狀態再次回到「2」 - >「爲主題A註冊」(這是不正確的)。有很多這樣的學生受到影響。我們希望運行一個查詢並獲取所有狀態從'3'改變爲任何其他狀態的記錄,如2,1,.... 如果有人提供了一個示例查詢,那將會很棒。感謝您的幫助!

回答

0

如果你想學生,您可以使用條件彙總:

select studentid 
from t 
group by studentid 
having max(case when statusid = 3 then timestamp end) < max(timestamp); 

如果你想要的是「3」,利用窗口函數後詳細記錄:

select t.* 
from (select t.*, max(case when statusid = 3 then timestamp end) as timestamp_3 
     from t 
    ) t 
where timestamp > timestamp_3; 
+0

謝謝爲您的輸入。我能夠檢索所有有問題的記錄,感謝您的幫助。謝謝 :) – Bruce