Tôi cần thực hiện tương đối dễ giải thích nhưng (với các kỹ năng có phần hạn chế) khó có thể viết truy vấn SQL.Truy vấn SQL khó hiểu liên quan đến các giá trị liên tiếp
Giả sử chúng ta có một bảng tương tự như thế này:
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 <--
Lưu ý rằng exam_no
và date
không nhất thiết phải liên quan như người ta có thể mong đợi từ các loại ví dụ tôi đã chọn.
Bây giờ, các truy vấn mà tôi cần làm là như sau:
- Từ kỳ thi mới nhất (
exam_no
= 3) tìm thấy tất cả các sinh viên đã thất bại (John Doe
,Ryan Smith
vàMary Lee
). - Đối với mỗi sinh viên này, hãy tìm ngày của đợt kiểm tra không thành công liên tiếp đầu tiên. Một cách khác để đặt nó là: cho mỗi học sinh này tìm thấy ngày thi đầu tiên không đạt được sau kỳ thi cuối cùng của họ. (Nhìn vào các mũi tên trong bảng).
Bảng kết quả nên được một cái gì đó như thế này:
name | surname | date_since_failing
------+---------+--------------------
John | Doe | 2012-02-01
Ryan | Smith | 2012-01-02
Mary | Lee | 2012-03-04
Làm thế nào tôi có thể thực hiện một truy vấn như vậy?
Cảm ơn bạn đã dành thời gian.
Người đọc khác: lưu ý rằng anh đã gắn thẻ 'MySQL' –
Giả sử bạn có thể tham gia trên cùng một bảng trên kết quả = 'FAIL' và chọn từ bảng có ngày cao nhất. Bạn đã thử cái gì? – Jocke
Bạn có ý nghĩa gì với "* bài kiểm tra mới nhất *"? Bài kiểm tra có ngày mới nhất? – eggyal