Autor Zpráva
Kwoky
Profil *
Dobrý den,
potýkám se s drobným problémem. Mám v tabulce 10 sloupců s datem a potřebuji vybrat nejnovější/nejstarší datum ze všech. Jak to udělat elegantně? Zatím jsem přišel jen na toto:
SELECT MAX(stanice_1d) s1, MAX(stanice_2d) s2,  MAX(stanice_3d) s3, ... FROM stanice

což mi vrátí řádek MAXů (pro každý sloupec jeden), ze kterého už to nějak vykopu. Ale věřím, že to jde i nějak líp. Poradíte mi prosím?
TomášK
Profil
Myslím, že tyhle dotazy by mohly fungovat, ale nezkoušel jsem je:
SELECT MAX(GREATEST(col1, col2)) FROM ...
SELECT MAX(col) FROM ( SELECT col1 FROM a UNION SELECT col2 FROM b )

Tipuju, že ten druhý bude rychlejší.
Kwoky
Profil *
První funguje, ale zlobí mě tam NULLové hodnoty. A to druhé se mi rozchodit nepodařilo. Co přesně má znamenat MAX(col)? Co mám napsat místo "col", aby mi to fungovalo (sloupec col v tabulce nemám)?
TomášK
Profil
V tom druhém jsem zapomněl aliasy:
SELECT MAX(col) FROM (SELECT col1 AS col FROM a UNION SELECT col2 AS col FROM b)

V mezičase jsem přišel na další variantu - nejjednodušší a nejrychlejší:
SELECT GREATEST(MAX(stanice_1d), MAX(stanice_2d), MAX(stanice_3d), ... ) FROM stanice

Můj tip na rychlost se ukázal úplně mimo - UNION reálně vytváří ty tabulky, zatímco ostatní výsledky
používají indexy.

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: