我需要执行一个相对容易解释但(鉴于我的技能有限)很难编写 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
不一定像我选择的示例中所期望的那样相关。
现在,我需要做的查询如下:
- 从最近的考试 (
exam_no
= 3) 中找出所有不及格的学生 (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
我怎样才能执行这样的查询?
感谢您的时间。