Muszę wykonać stosunkowo łatwe do wytłumaczenia, ale (biorąc pod uwagę moje nieco ograniczone umiejętności) trudne do napisania zapytanie SQL.Tricky zapytanie SQL z kolejnymi wartościami
Załóżmy, że mamy tabelę podobny do tego:
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 <--
pamiętać, że exam_no
i date
niekoniecznie są związane, jak można by oczekiwać od rodzaju przykład wybrałem.
Teraz, zapytanie, że muszę zrobić to w następujący sposób:
- Od najnowszej egzaminu (
exam_no
= 3) Znajdź wszystkie uczniów, które nie powiodło się (John Doe
,Ryan Smith
iMary Lee
). - Dla każdego z tych studentów znajdź datę pierwszej z serii kolejnych egzaminów nieudanych. Innym sposobem na to byłoby: dla każdego z tych studentów znaleźć datę pierwszego nieudanego egzaminu, który pojawia się po ostatnim zdanym egzaminie. (Spójrz na strzałki w tabeli).
Powstały tabela powinna być mniej więcej tak:
name | surname | date_since_failing
------+---------+--------------------
John | Doe | 2012-02-01
Ryan | Smith | 2012-01-02
Mary | Lee | 2012-03-04
Jak mogę wykonać takie zapytanie?
Dziękuję za poświęcony czas.
Inni czytelnicy: zauważ, że oznaczył go jako 'MySQL' –
Pomyśl, że możesz dołączyć do tego samego stołu na wyniku = 'FAIL' i wybrać z niego ten, który ma najwyższą datę. Co próbujesz? – Jocke
Co masz na myśli przez "* ostatni egzamin *"? Egzamin, który ma najnowszą datę? – eggyal