Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak wyciagnac id, max(pole) posortowane wg daty
Forum PHP.pl > Forum > Bazy danych > MySQL
misty
hej, mam problem z odpowiednim posortowaniem i wyciagnieciem danych z tabeli. Przyklad tabeli:

id | ilosc | data

i teraz - wyciagnac te id dla ktorych ilosc jest maksymalna kazdego dnia.
probowalam robic cos typu:

select id, max(ilosc) from tabela group by data

ale niestety id nie zgadzaly sie z max(ilosc).

moglby mnie ktos naprowadzic?

pzdr
Mchl
A jak to robi człowiek? Najpierw dla każdej daty szuka maksymalnej wartości, a potem spradza jakie jest przy niej ID

Kod
SELECT
  id
FROM
  tabela AS t
CROSS JOIN (
  SELECT
    data, MAX(ilosc) AS ilosc
  FROM
    tabela
  GROUP BY
    data
) AS sq
USING (data, ilosc)
reaktor
Mozna to rowniez zrobic unikajac CROSS JOIN ktory jest wygodny, ale nieefektywny dla bardzo duzych tabel:

  1. SELECT
  2. o.id, o.DATA, o.ilosc
  3. FROM tabela t
  4. JOIN
  5. (
  6. SELECT max(ilosc) AS maxil, DATA FROM tabela GROUP BY DATA
  7. ) x
  8. ON t.DATA=x.DATA AND t.ilosc=x.mail
Mchl
A w jaki sposób go unikasz, bo nie widzę?
(Innymi słowy, czym się różni Twoje zapytanie od mojego?)
reaktor
Masz racje; wymadrzam sie, a tymczasem zapytania zostana wykonane identycznie.
Wobec tego zmieniam swoj komentarz na: "mozna jeszcze tak to ujac:" winksmiley.jpg

pozdrawiam

Aha, jest jedna roznica: Twoje nie zadziala np pod SQLServer, a moje zadziala smile.gif
Mchl
Twoje nie zadziała nigdzie tongue.gif
Nie ma tabeli `o` winksmiley.jpg
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.