Autor Zpráva
Giga
Profil
Pěknou neděli přeju :)

V tabulce mám záznamy o počasí. Chtěl bych vybrat ty záznamy, které jsou z posledního roku.
Tedy něco jako:

select * from pocasi where year(datum) = max(year(datum))

Ptám se jenom na realizovatelnost jedním dotazem. Dvěma dotazy to umím ;)

Děkuji.
Kajman
Profil
Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení řádků s maximální (minimální) hodnotou

Ale pokud nemáte vytvořený index nad výsledkem funkce year, snažil bych se, aby výsledný dotaz vypadal jako
select * from pocasi where datum>=date('2023-01-01')
protože pak, stačí i obyčejný index nad sloupcem datum, pokud databáze funkční indexy neumí.

To datum si můžete vegenerovat poddotazem.
select * from pocasi p where datum>=(select date(concat(year(max(m.datum)),'-01-01')) from pocasi m)
jen si zkontrolujte v explain, zda ten poddotaz nedělá plánovač pro každý řádek (občasná chyba v mysql), pak budou rychlejší dotazy dva, nebo řešení s joinem jako v odkaze.
Giga
Profil
Kajmane, díky.
Poddotaz se mi moc líbí a dělá to co chci.

Fornulace dotazu
select * from pocasi where datum>=date('2023-01-01')
má tu nevýhodu, že se nemůžu ptát na "POSLEDNÍ ROK" ale ptám se na konkrétní rok a není tak
univerzálně použitelný na částkové tabulky (třeba do roku 2015) kde bych musel zjišťovat, kdy ty data končí.

Děkuji.
Kajman
Profil
Omezení i na druhou hranici roku přeci není žádný problém přidat.

select * from pocasi where datum>=date('2015-01-01') AND datum<date('2016-01-01')

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