我想使用highcharts来查看最后一小时的温度行为。
我每小时记录20到30个温度值。 在这里,我想提取最后一小时的4到6个平均值(10或15分钟的一个值)并绘制它们。也许我会将其改为3个值(一个20分钟)以使事情更顺畅。
我有这样的价值观(例如):
mysql> SELECT date,valeur FROM temperature
+---------------------+--------+
| date | valeur |
+---------------------+--------+
| 2013-09-26 11:30:40 | 25.2 |
| 2013-09-26 11:33:19 | 25.4 |
| 2013-09-26 11:34:12 | 25.5 |
| 2013-09-26 11:38:37 | 25.4 |
| 2013-09-26 11:39:30 | 25.4 |
| 2013-09-26 11:40:23 | 25.4 |
| 2013-09-26 11:43:02 | 25.4 |
| 2013-09-26 11:45:41 | 25.3 |
| 2013-09-26 11:47:33 | 25.3 |
| 2013-09-26 11:51:07 | 25.4 |
| 2013-09-26 11:51:52 | 25.3 |
...
我尝试使用此命令解压缩:
SELECT ROUND(UNIX_TIMESTAMP(date)/(15 * 60)) AS timekey, ROUND(AVG(valeur),1) AS a FROM temperature WHERE date >= (now() - INTERVAL 1 HOUR) GROUP BY timekey ORDER BY DATE;
但我没有得到任何输出。如果我将间隔更改为5小时,我会得到16个值:
[1534861, 24.600000]
[1534862, 24.600000]
[1534863, 24.600000]
[1534864, 24.700000]
[1534865, 24.700000]
[1534866, 24.600000]
[1534867, 24.600000]
[1534868, 24.600000]
[1534869, 24.600000]
[1534870, 24.600000]
[1534871, 24.700000]
[1534872, 24.700000]
[1534873, 24.700000]
[1534874, 24.800000]
[1534875, 25.000000]
[1534876, 25.200000]
知道如何纠正这个mysql请求吗?
谢谢大家
格雷格
编辑 - 查看选定的答案:代码很好,但时区不是!
答案 0 :(得分:0)
我猜您的问题很可能是1小时的时区差异。
如果你没有得到最后一小时的值,但是你得到最后5小时的16(构成值4小时值),这听起来你没有最后一小时的值。如果您确定这样做,请检查数据的时区与now()
的时区尝试使用sysdate。从手册引用:
此外,SET TIMESTAMP语句会影响返回的值 NOW()但不是SYSDATE()。这意味着时间戳设置 二进制日志对SYSDATE()的调用没有影响。设置 timestamp到非零值会导致每次后续调用 NOW()返回该值。将时间戳设置为零会取消此操作 效果,以便NOW()再次返回当前日期和时间。
有关的更多信息,请参阅SYSDATE()的说明 两种功能之间的差异。
答案 1 :(得分:0)
这应该有效(注意floor()
用法):
SELECT from_unixtime(floor(unix_timestamp(date) / 15 * 60) * 15 * 60) AS tstamp,
round(avg(valeur),1) AS a
FROM temperature
WHERE date >= (now() - INTERVAL 1 HOUR)
GROUP BY 1
ORDER BY 1