Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GROUP BY, MAX()
Forum PHP.pl > Forum > Bazy danych > MySQL
wojckr
Witam,
mam taką tabelę

id | id_obiektu | wartosc
---------------------------
0 | 0 | a_id0
1 | 0 | b_id1
2 | 1 | c_id2
3 | 2 | d_id3
4 | 2 | e_id4
5 | 2 | f_id5

Chcę pogrupować wynik w zbiory według id_obiektu i aby w kolumnie "wartość" pokazały się wartości (a_id0, b_id1...) przy największym id w grupie i aby było posortowane malejąco według max(id).
Czyli:
id | id_obiektu | wartosc | MAX(id)
---------------------------
5 | 2 | f_id5 | 5
2 | 1 | c_id2 | 2
1 | 0 | b_id1 | 1

Próbuję tak:
  1. SELECT *,MAX(id) FROM tabela GROUP BY id_obiektu ORDER BY MAX(id) DESC


i otrzymuję ładnie posorowane malejąco od największego id w grupie ( MAX(id) ), ale w kolumnie "wartość" otrzymuję wartości dla minimalnego id i tak samo id jest najmniejsze w grupie, czyli:

id | id_obiektu | wartosc | max(id)
------------------------------------
3 | 2 | d_id3 | 5
2 | 1 | c_id2 | 2
0 | 0 | a_id0 | 1

Częściowo udało się to zrobić z DESC na końcu
  1. SELECT *,MAX(id) FROM tabela GROUP BY id_obiektu DESC

bez ORDER BY sortuje według id_obiektu i podaje najwieksza wartosc w grupie, ale po dodaniu ORDER BY (które teoretycznie powinno odnosić się do zbioru wynikowego), powstaje jeszcze znowu to samo sie dziej.

Inaczej, może bardziej obrazowo: mamy wynik w grupach (jakiś wiersz reprezentuje grupę), i chcemy, aby reprezentantem grupy był rekord z najwiekszym id w tej grupie i, aby wszystko było posortowane według id malejąco.

Z góry dzięki za pomoc. Nie moge sobie z tym poradzić chyba od x godzin..
nevt
  1. SELECT * FROM (SELECT * FROM tabela ORDER BY id DESC) AS tmp GROUP BY id_obiektu ORDER BY id DESC;


Edit: zapomniałem o sortowaniu wyniku...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.