説明するのは比較的簡単ですが、(私のスキルがやや限られているため)SQLクエリを書くのは難しいです。
次のようなテーブルがあるとします。
exam_no | name | surname | result | date
---------+------+---------+--------+------------
1 | John | Doe | PASS | 2012-01-01
1 | Ryan | Smith | FAIL | 2012-01-02 <--
1 | Ann | Evans | PASS | 2012-01-03
1 | Mary | Lee | FAIL | 2012-01-04
... | ... | ... | ... | ...
2 | John | Doe | FAIL | 2012-02-01 <--
2 | Ryan | Smith | FAIL | 2012-02-02
2 | Ann | Evans | FAIL | 2012-02-03
2 | Mary | Lee | PASS | 2012-02-04
... | ... | ... | ... | ...
3 | John | Doe | FAIL | 2012-03-01
3 | Ryan | Smith | FAIL | 2012-03-02
3 | Ann | Evans | PASS | 2012-03-03
3 | Mary | Lee | FAIL | 2012-03-04 <--
exam_no
私が選んだ種類の例から予想されるように、とdate
は必ずしも関連していないことに注意してください。
ここで、実行する必要があるクエリは次のとおりです。
- 最新の試験 ( = 3) から、不合格 ( 、および)
exam_no
のすべての学生を見つけます。John Doe
Ryan Smith
Mary Lee
- これらの学生のそれぞれについて、連続して失敗した試験のバッチの最初の日付を見つけます。別の言い方をすると、これらの生徒のそれぞれについて、最後に合格した試験の後に来る最初の不合格の試験の日付を見つけます。(表の矢印を見てください)。
結果のテーブルは次のようになります。
name | surname | date_since_failing
------+---------+--------------------
John | Doe | 2012-02-01
Ryan | Smith | 2012-01-02
Mary | Lee | 2012-03-04
このようなクエリを実行するにはどうすればよいですか?
お時間をいただきありがとうございます。