Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> grupowanie z jednym polem max
MadMark
post 12.12.2016, 11:10:24
Post #1





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 12.07.2010

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


cześć,
potrzebuję pomocy z grupowaniem tj. mam tabelę
  1. CREATE TABLE modifications (
  2. id int PRIMARY KEY AUTO_INCREMENT,
  3. date timestamp DEFAULT timestmp NOT NULL,
  4. object_id int, -- fk to objects
  5. status_id int, -- fk to statuses
  6. );


i chciałbym pobrać wszystkie wiersze, w których status_id jest najnowszy (max(date)) w ramach jednego object_id. Mówiąc krótko, dla każdego okiektu potrzebny mi najnowszy status.

Działa (ale za wolno, bo ok. 200 ms)
  1. SELECT f.* FROM modifications f WHERE (f.obiect_id, f.date) IN (SELECT g.obiect_id AS obiect_id, max(g.date) AS date FROM modifications g GROUP BY g.obiect_id)


Samo zrobienie:
  1. SELECT * FROM modifications GROUP BY obiect_id HAVING date=max(date)

nie działa, ponieważ zwraca pierwszy napotkany status, a nie ten pasujący do maksymalnej daty (nie najnowszy, a pierwszy insertowany).

Jak powinno wyglądać najprostsze zapytanie, żeby zwrócić najnowszy status dla każdego obiektu ?
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.08.2025 - 13:28