Mysql
 sql >> база данни >  >> RDS >> Mysql

Средна стойност на данните за всеки 5 минути в дадените времена

Групиране на интервали

Трябва да използвате group by за да създадете една група за всеки интервал, за който искате да направите усредняване.

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

Това използва факта, че дата и час могат имплицитно да бъдат преобразувани в число, което след това ще бъде във формат YYMMDDhhmmss . Разделянето на такова число на 100 отнема секундите и по подобен начин разделянето на 500 дава уникално число за всеки 5-минутен интервал.

Допълнителната колона, която избрах, ще даде средата на интервала:всеки момент от интервала (тук избирайки минимума, но няма значение), превърнат в този 5-минутно число на интервала, обратно в дата и час номер и след това добавяне на две минути и половина. Можете да използвате подобен синтаксис, за да изчислите началото (просто оставете + 230 изход) или (включително) край (+ 459). ) на интервала.

Тествано с помощта на sqlfiddle .

Край на обработката на диапазон

Обърнете внимание, че вашият BETWEEN диапазонът ще включва редове от 15:30:00 но никой друг от интервала не е започнал по това време. Може би искате да изключите края на диапазона от избора си:

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

Защо получавате NULL

Относно защо вашата заявка дава NULL :За да извършвате интервална аритметика, не ограждате целия интервал в кавички и използвате единствени имена за единици за време. т.е.

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

Но това просто ще разшири диапазона до 2012-09-08 15:35:00 и все още не създавайте тези 5-минутни интервали, които искате. По начина, по който сте го написали, вие се опитвате да добавите два низа, което не е възможно в MySQL, освен ако низовете не могат да бъдат преобразувани в числа, в който случай тези числа ще бъдат добавени.

Може да искате да използвате интервална аритметика, за да изчислите изключителния край на интервала, т.е. първата секунда след интервалът:

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

Просто добавяне на 500 вместо 230 на моята заявка няма да работи, тъй като полученото число може да представлява невалидна дата за последния интервал от всеки час.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да намеря входна стойност тип=изображение в $_POST

  2. Как да пренаредите MySQL колоните?

  3. PDO::__construct():Сървърът изпрати набор от знаци (255), неизвестен на клиента. Моля, докладвайте на разработчиците

  4. mysqldump чрез SSH към локален компютър

  5. Отпадането на таблицата кара MySQL да виси