Tabela osoby:
- id
- imie
- nazwisko
Tabela statusy:
- id
- id_osoby
- data_rozpoczecia
- info1
- info2
- info3
Problem polega na tym, jak zmusić MySQL do wybrania tego statusu, który ja chce? A chcę taki, którego data_rozpoczęcia jest maksymalna.
Jeżeli wykonam
, to otrzymam zdublowane rekordy.
SELECT * FROM osoby o LEFT JOIN statusy s ON o.id=s.id_osoby
Jeżeli wykonam
, to zostanie wybrany przypadkowy status (chyba najstarszy).
SELECT * FROM osoby o LEFT JOIN statusy s ON o.id=s.id_osoby GROUP BY o.id
Jeżeli wykonam
, to nic się nie zmieni.
SELECT * FROM osoby o LEFT JOIN statusy s ON o.id=s.id_osoby GROUP BY o.id HAVING max(data_rozpoczecia)
Jeżeli wykonam
, to osoba mająca wiele statusów zniknie z wyników.
SELECT * FROM osoby o LEFT JOIN statusy s ON o.id=s.id_osoby GROUP BY o.id HAVING max(data_rozpoczecia)=data_rozpoczecia
Jeżeli wykonam
, to otrzymam właściwą datę statusu, ale nieprawidłowe dane.
SELECT *, max(data_rozpoczecia) FROM osoby o LEFT JOIN statusy s ON o.id=s.id_osoby GROUP BY o.id
Nic więcej nie przychodzi już mi do głowy. Może ktoś wie, jak rozwiązać mój problem?