Autor Zpráva
Giga
Profil
Zdar pánové,

mám databázi o počasí
Datum Tmax Tmin Tden Srážky Tlak Síla větru, Směr větru ....
na jednom místě za posledních 17 let.
Pro každý den jeden řádek. Teď bych chtěl zjistit pro každé datum v roku jaká byla v ten den nejvyšší/nejnižší teplota.
Řeším to tak že uvedu v sql dotazu klauzuli where Month(Datum)=Měsíc(Dnes) and Day(datum)=Den(Dnes).
Výsledky seřazené podle Tmax mi dají přehled o rozsahu denních maximálních teplot. Obdobně je to u Tmin.
To znamená dva dotazy na databázi pro každé datum v roce.
Lze to v MySQL nějakým způsobem racionalizovat?
Kajman
Profil
Něco jako
select min(Tmax) tmax_min, max(Tmax) tmax_max, min(Tmin) tmin_min, max(Tmin) tmin_max
from tabulka
where Month(Datum)=Měsíc(Dnes) and Day(datum)=Den(Dnes)

Vrátí jeden řádek se čtyřmi sloupci.

Pokud ten dotaz budete dělat často, zvažte dva nové sloupce, kde bude den a měsíc. Nad takovými sloupci by se pak dal udělat dvousloupcový index a dotaz bude rychlejší.
Keeehi
Profil
Tohle ti udělá celoroční přehled.
SELECT
    day(datum) AS den,
    month(datum) AS mesic,
    min(Tmax) AS minimum,
    max(Tmin) AS maximum
FROM
    tabulka
GROUP BY
   day(datum),
   month(datum)
Giga
Profil
Děkuji za podnety :)

Nad celoročním přehledem se asi budu muset vážně zamyslet :)
Giga
Profil
Kajmanova rada s extra sloupci pro den a měsíc dává smysl.
Keeehiův dotaz je super. (Jenom je potřeba změnit pořadí v GROUP BY. Jako první měsíc, pak den)

Děkuji.
Keeehi
Profil
Giga:
Zrovna tady by nemělo na pořadí záležet jelikož jde o dvě na sobě nezávislé hodnoty.
Jestli myslíš kvůli řazení výsledku, pak je to "taky jedno". Že je výsledek nějak seřazený po GROUP BY je jen vedlejší produkt. Ale není to zaručené, proto bys na to neměl spoléhat. Pokud chceš mít výsledky seřazené, měl bys ještě použít ORDER BY. A ano, tam už na pořadí záleží.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0