Autor | Zpráva | ||
---|---|---|---|
Kwoky Profil * |
#1 · Zasláno: 16. 6. 2009, 00:37:26
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 |
#2 · Zasláno: 16. 6. 2009, 00:50:24 · Upravil/a: TomášK
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 * |
#3 · Zasláno: 16. 6. 2009, 11:16:30
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 |
#4 · Zasláno: 16. 6. 2009, 12:41:46
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. |
||
Časová prodleva: 15 let
|
0