Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmuszanie GROUP BY do zcalania w rekordow w okreslonym porzadku.
thornag
post 21.11.2007, 13:44:55
Post #1





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


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 ?


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
nospor
post 21.11.2007, 13:51:59
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
thornag
post 21.11.2007, 14:48:52
Post #3





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


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)


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2025 - 19:37