2017-08-02 6 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 

1学生StudentID = 555ために、彼はすでに過ぎ被験者Aは、最終的な状態であるべき、(行2を参照)、誰かが手動で行って、戻って「2」に再びステータスを更新します - > "Subject Aに登録されました"(これは間違っています)。そのような影響を受けた学生がたくさんいます。クエリを実行し、ステータスが '3'から2,1、...のような他のステータスに変更されたすべてのレコードを取得したいと考えました。 例クエリを提供するのは素晴らしいことです。助けてくれてありがとう!

答えて

0

あなたは学生をしたい場合は、条件付きの集約を使用することができます:あなたが「3」の後にある詳細な記録をしたい場合は、ウィンドウ関数を使用し、

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

を:

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

関連する問題