SQLPytanie 07 z 14
Ostatnio użyty produkt — MAX czy cały wiersz?
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
MAX(used_at) daje datę, ale nie identyfikator produktu. Jeżeli oczekiwany jest jeden rekord, wybieram go przez sortowanie z rozstrzygnięciem remisów.
SQL
-- product_usage(id PRIMARY KEY, product_id, used_at)
SELECT product_id, used_at
FROM product_usage
WHERE used_at IS NOT NULL
ORDER BY used_at DESC, id DESC
LIMIT 1;Doprecyzowanie: gdy trzeba zwrócić wszystkie rekordy z najnowszą datą, porównuję used_at z podzapytaniem MAX(used_at).
Pułapka: bez drugiego klucza sortowania wybór spośród remisów może być niedeterministyczny. MAX(id) nie musi oznaczać ostatniego zdarzenia biznesowego.
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.