Ho bisogno di eseguire un relativamente facile da spiegare ma (date le mie competenze un po 'limitate) difficile scrivere query SQL.Query astuta di SQL che coinvolge valori consecutivi
Supponiamo di avere un tavolo simile a questo:
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 <--
noti che exam_no
e date
non sono necessariamente correlati, come ci si potrebbe aspettare dal tipo di esempio che ho scelto.
Ora, la domanda che ho bisogno di fare è la seguente:
- Dalle ultime esame (
exam_no
= 3) trovare tutti gli studenti che non sono riusciti (John Doe
,Ryan Smith
eMary Lee
). - Per ciascuno di questi studenti, trovare la data del primo lotto di esami consecutivi in mancanza. Un altro modo per dirlo sarebbe: per ognuno di questi studenti, trova la data del primo esame fallito che viene dopo l'ultimo esame di passaggio. (Guarda le frecce sul tavolo).
La tabella risultante dovrebbe essere qualcosa di simile:
name | surname | date_since_failing
------+---------+--------------------
John | Doe | 2012-02-01
Ryan | Smith | 2012-01-02
Mary | Lee | 2012-03-04
Come posso eseguire una query?
Grazie per il vostro tempo.
Altri lettori: notare che lo ha taggato "MySQL" –
Pensa di poter partecipare alla stessa tabella su result = "FAIL" e selezionare da esso quella con la data più alta. Che cosa hai provato? – Jocke
Cosa intendi con "* l'ultimo esame *"? L'esame che ha l'ultima data? – eggyal