【发布时间】:2012-07-04 13:34:38
【问题描述】:
我需要执行一个相对容易解释但(鉴于我的技能有限)很难编写 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
如何执行这样的查询?
感谢您的宝贵时间。
【问题讨论】:
-
其他读者:注意他将其标记为“MySQL”
-
认为您可以在 result='FAIL' 上加入同一张表,并从中选择日期最高的表。你试过什么?
-
“最新的考试”是什么意思?考试日期最晚?
-
我所说的“最新考试”是指
exam_no最大的考试。 -
我已经重写了我的答案,再次检查一下