Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: select z group by i max()
Forum PHP.pl > Forum > Bazy danych > MySQL
wojtekr
Witam, mam problem z zapytaniem:
  1. SELECT max(data_change), firma.nazwa, new_ryczalt,
  2. FROM zmiana_ryczaltu,firma WHERE zmiana_ryczaltu.id_firma=firma.id_firma
  3. GROUP BY zmiana_ryczaltu.id_firma ORDER BY id_zmiana_ryczalt

W tym zapytaniu chodzi mi o wybranie takich rekordów, w których wartość new_ryczalt pochodzi z rekordu , w któym data_change jest maksymalna i id_firma jest taka sama.
Tak wykonane zapytanie zwraca max-data i new ryczalt ale sa to dane z dwu różnych rekordów
wojtekr
nospor
A może:
  1. SELECT max(data_change), firma.nazwa, new_ryczalt,
  2. FROM zmiana_ryczaltu,firma WHERE zmiana_ryczaltu.id_firma=firma.id_firma AND data_change=max(data_change)
  3. GROUP BY zmiana_ryczaltu.id_firma ORDER BY id_zmiana_ryczalt
popbart
@nospor ,a może tak sprawdzaj swoje teorie na localu winksmiley.jpg

@wojtekr podaj strukturę tabel a coś poradzimy
wojtekr
problem dotyczy tabel: firma i zmiana_ryczaltu.
firma: id_firma, nazwa
zmiana_ryczaltu: id_zmiana_ryczaltu, id_firma, old_ryczalt, new_ryczalt, data_change

Jak pisałem wyżej: jeżeli zrobię max(data_change) to zwraca mi max data ale nie zwraca pasujacy _ryczalt.

Natomiast
  1. WHERE zmiana_ryczaltu.id_firma=firma.id_firma AND data_change=max(data_change)

zwraca:
Invalid use of group function
popbart
Jeżeli mysql 4.1.x to :
  1. SELECT *
  2. FROM zmiana_ryczaltu WHERE concat_ws(id_firma,data_change,'|')
  3. IN(SELECT concat_ws(id_firma,max(data_change),'|')
  4. FROM zmiana_ryczaltu GROUP BY id_firma)

Sprawdzałem i działa cool.gif .
Jeżeli ma ktoś lepszy pomysł, to sam jestem ciekaw smile.gif
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.