ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql – 计算日期/时间段的平均值

2019-07-17 05:25:56  阅读:905  来源: 互联网

标签:mysql datetime select timespan


问题:

我有一个传感器读数数据库,带有读取传感器时间的时间戳.基本上它看起来像这样:

Sensor | Timestamp | Value

现在我想从这些数据中制作一个图表,我想制作几个不同的图表.假设我想要一个最后一天,一个是上周,一个是上个月.每个图的分辨率将不同,因此对于日图,分辨率将为1分钟.对于周图表,它将是一个小时,对于月份图表,它将是一天或一天​​的四分之一.

所以我希望输出是每个分辨率的平均值(例如,Day =一分钟内的平均值,Week =一小时内的平均值等等)

例如:

Sensor | Start | End | Average

如何在mySQL中轻松快速地完成此操作?我怀疑它会创建一个临时表或进行排序并将传感器数据与其连接以获得传感器的平均值?但我对mySQL的了解最多也是有限的.

有一个非常聪明的方法吗?

解决方法:

SELECT  DAY(Timestamp), HOUR(Timestamp), MINUTE(Timestamp), AVG(value)
FROM    mytable
GROUP BY
        DAY(Timestamp), HOUR(Timestamp), MINUTE(Timestamp) WITH ROLLUP

WITH ROLLUP子句在这里产生额外的行,每个HOUR和DAY的平均值,如下所示:

SELECT  DAY(ts), HOUR(ts), MINUTE(ts), COUNT(*)
FROM    (
        SELECT  CAST('2009-06-02 20:00:00' AS DATETIME) AS ts
        UNION ALL
        SELECT  CAST('2009-06-02 20:30:00' AS DATETIME) AS ts
        UNION ALL
        SELECT  CAST('2009-06-02 21:30:00' AS DATETIME) AS ts
        UNION ALL
        SELECT  CAST('2009-06-03 21:30:00' AS DATETIME) AS ts
        ) q
GROUP BY
        DAY(ts), HOUR(ts), MINUTE(ts) WITH ROLLUP
2, 20, 0, 1
2, 20, 30, 1
2, 20, NULL, 2
2, 21, 30, 1
2, 21, NULL, 1
2, NULL, NULL, 3
3, 21, 30, 1
3, 21, NULL, 1
3, NULL, NULL, 1
NULL, NULL, NULL, 4

2,20,NULL,2这里表示COUNT(*)为2表示DAY = 2,HOUR = 20和所有分钟.

标签:mysql,datetime,select,timespan
来源: https://codeday.me/bug/20190717/1485466.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有