sql >> Databáze >  >> RDS >> Mysql

Průměr dat za každých 5 minut v daných časech

Seskupit do intervalů

Měli byste použít group by pro vytvoření jedné skupiny pro každý interval, za který chcete vytvořit průměr.

select avg(Column), convert((min(datetime) div 500)*500 + 230, datetime) as time
from Databasename.tablename 
where datetime BETWEEN '2012-09-08 00:00:00' AND '2012-09-08 15:30:00'
group by datetime div 500

To využívá skutečnosti, že datum a čas lze implicitně převést na číslo, které pak bude ve formátu YYMMDDhhmmss . Vydělením takového čísla 100 se odeberou sekundy a podobně dělením 500 získá jedinečné číslo pro každý 5minutový interval.

Dodatečný sloupec, který jsem vybral, bude uvádět střed intervalu:jakýkoli čas z intervalu (zde volíte minimum, ale na tom nezáleží), přeměněn na toto 5minutové číslo intervalu, zpět na datum a čas číslo a poté přidejte dvě a půl minuty. Pro výpočet začátku můžete použít podobnou syntaxi (stačí ponechat + 230 out) nebo (včetně) konec (+ 459 ) intervalu.

Testováno pomocí sqlfiddle .

Zpracování konce rozsahu

Všimněte si, že vaše BETWEEN rozsah bude zahrnovat řádky od 15:30:00 ale žádný jiný z intervalu v té době nezačal. Možná budete chtít z výběru vyloučit konec rozsahu:

where datetime >= '2012-09-08 00:00:00' AND datetime < '2012-09-08 15:30:00'

Proč máte hodnotu NULL

Proč váš dotaz dává NULL :Chcete-li provádět intervalovou aritmetiku, neuzavíráte celý interval do uvozovek a pro časové jednotky používáte singulární názvy. T.j.

'2012-09-08 15:30:00' + INTERVAL 5 minute

Ale to by jednoduše rozšířilo rozsah na 2012-09-08 15:35:00 a přesto nevytvářejte požadované 5minutové intervaly. Jak jste to napsali, pokoušíte se přidat dva řetězce, což v MySQL není možné, pokud řetězce nelze převést na čísla, v takovém případě budou tato čísla přidána.

Možná budete chtít použít intervalovou aritmetiku k výpočtu výhradního konce intervalu, tj. první sekundy po interval:

 convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval

Stačí přidat 500 místo 230 mého dotazu nebude fungovat, protože výsledné číslo může představovat neplatné datum pro poslední interval každé hodiny.




  1. Vzdálený přístup k serveru MySQL přes tunel SSH

  2. Nastavení MySQL InnoDB Cluster s MySQL Shell (plus MySQL Router)

  3. Jak získat čtvrtletní datum v Oracle?

  4. Najděte a nahraďte část textu v poli pomocí MySQL