Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmuszanie GROUP BY do zcalania w rekordow w okreslonym porzadku.
Forum PHP.pl > Forum > Bazy danych > MySQL
thornag
Hej,

Zalozmy tabele -> table1

Kod
ID, CREATED
1 , 123
2 , 145
1 , 207
1 , 308
2 , 409


Zadanie jest takie zeby wybrac najnowsze rekordy po jednym dla kazdego ID.

Mozna to zrealizowac nastepujacym zapytaniem

  1. SELECT * FROM table1 WHERE created IN (
  2. SELECT MAX(created) FROM table1 GROUP BY id
  3. )


To zadziala i zwroci prawidlowo. Mnie chodzi natomista o mozliwosc zalatwienia tego bez podzapytania.

Probowalem na zasadzie

  1. SELECT MAX(created) AS maxx, * FROM table1 GROUP BY id HAVING created = maxx


To nie zwraca rekordow.

Zrobienie po prostu
  1. SELECT * FROM table1 GROUP BY id
  2. ORDER BY created DESC


Powoduje ze rekordy scalane sa albo losowo (tego nie jestem pewien) albo dostaje rekord najstarszy a chodzi mi o najnowszy.

Macie jakies pmysly zeby sie pozbyc tego podzapytania ?
nospor
Cytat
To nie zwraca rekordow.
Rekordow to moze i nie zwraca ale bledy napewno.

  1. SELECT MAX(created) AS maxx, table1.* FROM table1 GROUP BY id HAVING created = maxx

a teraz?
thornag
Nie nie zwraca rekordow, query na ktorym pracuje jest troche bardziejs komplikowane a to co pokazalem to byl bardziej pseudo kod zeby pokazac problem.



  1. SELECT MAX(m.created) AS maxx, m.*, c.name AS categoryName FROM shout_messages m
  2. INNER JOIN shout_categories c ON (m.category = c.cat_id)
  3. GROUP BY mem_id HAVING created = maxx


To zapytanie nie dziala poprawnie (bledu nie zwraca ale wyniki tez poprawne nie sa)
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-2025 Invision Power Services, Inc.