O webu
Záznamy z SQL za poslední hodinu, den, měsíc

Při psaní aplikace využívající databási (např. MySQL) se dřív nebo později setkáme s potřebou vypisovat data za určité období do minulosti.

Vytvořit si požadované datum pro porovnávání je sice možné například v PHP, ale jako elegantnější řešení se mi jeví použití SUBDATE, NOW a INTERVAL přímo v SQL.

Funkce SUBDATE odečte od aktuálního data (NOW) stanovený interval.

Interval se zadává pomocí čísla a klíčového slova pro časový úsek (MINUTE, HOUR, DAY, YEAR). Pozor, klíčové slovo je vždy v jednotném čísle, tedy ne DAYS, HOURS a podobně.

Za poslední minutu

SELECT * FROM tabulka
WHERE datum > SUBDATE(NOW(), INTERVAL 1 MINUTE)

Za poslední hodinu

SELECT * FROM tabulka
WHERE datum > SUBDATE(NOW(), INTERVAL 1 HOUR)

Za poslední den (24 hodin)

SELECT * FROM tabulka
WHERE datum > SUBDATE(NOW(), INTERVAL 1 DAY)

Za poslední měsíc

SELECT * FROM tabulka
WHERE datum > SUBDATE(NOW(), INTERVAL 1 MONTH)

Za poslední rok

SELECT * FROM tabulka
WHERE datum > SUBDATE(NOW(), INTERVAL 1 YEAR)

V případě, že je potřeba vypsat záznamy za poslední měsíc a tabulka obsahuje i záznamy s datem v budoucnosti (vyšším než aktuálním) – třeba u článků, které mají teprve vyjít, je potřeba použít BETWEEN.

SELECT * FROM tabulka
WHERE datum BETWEEN NOW() AND SUBDATE(NOW(), INTERVAL 1 DAY)

Následující den

Někdy je naopak potřeba vypsat záznamy, které mají datum v následujícím období. I tady už je nutné použít BETWEEN a záporný INTERVAL.

SELECT * FROM tabulka
WHERE datum BETWEEN NOW() AND SUBDATE(NOW(), INTERVAL -1 DAY)