możesz użyj GROUP BY
, ale ważne jest, aby zrozumieć, jak to działa.
Gdy używasz GROUP BY
grupa wierszy jest zwinięta w jeden, a to, co jest wyświetlane w innych kolumnach, które nie są używane w Twojej GROUP BY
jest określana za pomocą funkcji agregujących lub jest to losowy wiersz z tej grupy. Nie możesz być pewien, że otrzymasz wiersz odpowiadający wierszowi wyświetlanemu z MAX()
wartości lub dowolnej użytej funkcji agregującej. Staje się to szczególnie oczywiste, gdy wykonujesz zapytanie typu:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id
„inna_kolumna” może należeć do wiersza zawierającego wartość MIN() lub MAX() lub nawet do innego wiersza, który w ogóle nie jest wyświetlany. W innych RDBMS niż MySQL zabronione jest wybieranie kolumn, które nie używają funkcji agregujących lub nie są wymienione w GROUP BY
klauzuli, tylko po to, aby użytkownicy nie popełnili błędu lub nie pomyśleli, że uzyskali właściwy wynik.
Tak więc w twoim przypadku wydaje się, że chcesz wyświetlić również kolumnę „wartość”. Z powyższych powodów odpowiedź juergen_d jest błędna, ponieważ nie wybiera „wartości”, a gdyby tak było, nie można być pewnym, że jest to właściwa „wartość”. Odpowiedź Filipe Silvy jest błędna, ponieważ grupuje według „wartości”. Spowoduje to w twoim przypadku faktycznie zwrócenie całego stołu. Odpowiedź Romesha jest błędna, ponieważ użycie dwukrotności MAX()
funkcja da ci maksymalne wartości, oczywiście, ale nie wartość odpowiadającą wartości daty i godziny.
Więc jak masz to zrobić? Tutaj opisano 3 sposoby . Naucz się ich, stosując je samodzielnie. To nie takie trudne :)