2

我想使用 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 请求吗?

谢谢大家

格雷格

编辑 - 查看选择的答案:代码很好,但时区不是!

4

2 回答 2

0

我猜你的问题很可能是 1 小时的时区差异。

如果你在最后一小时没有得到任何值,但你在最后 5 个得到 16(构成 4 小时的值),那听起来你在最后一小时没有任何值。如果您确定这样做,请检查数据的时区与 now() 的时区

尝试使用 sysdate 也许。从手册中引用:

此外,SET TIMESTAMP 语句会影响 NOW() 而不是 SYSDATE() 返回的值。这意味着二进制日志中的时间戳设置对 SYSDATE() 的调用没有影响。将时间戳设置为非零值会导致 NOW() 的每个后续调用都返回该值。将时间戳设置为零会取消此效果,以便 NOW() 再次返回当前日期和时间。

有关这两个函数之间差异的更多信息,请参阅 SYSDATE() 的描述。

于 2013-10-10T08:22:04.270 回答
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
于 2013-10-10T08:25:55.027 回答