我使用 Raspberry Pi 和 DHT11 每 5 分钟在 MySQL 数据库中记录温度和湿度数据。
MariaDB [measurements]> desc measurements;
+-------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+-------+
| ttime | datetime | YES | | NULL | |
| temperature | float(4,1) | YES | | NULL | |
| humidity | float(4,1) | YES | | NULL | |
+-------------+------------+------+-----+---------+-------+
3 rows in set (0.004 sec)
MariaDB [measurements]> select * from measurements order by ttime limit 10;
+---------------------+-------------+----------+
| ttime | temperature | humidity |
+---------------------+-------------+----------+
| 2021-01-06 22:10:03 | 28.0 | 59.0 |
| 2021-01-06 22:14:56 | 30.0 | 52.0 |
| 2021-01-06 22:19:47 | 30.0 | 93.0 |
| 2021-01-06 22:54:39 | 28.0 | 57.0 |
| 2021-01-06 23:16:51 | 27.0 | 59.0 |
| 2021-01-06 23:18:04 | 28.0 | 60.0 |
| 2021-01-06 23:19:36 | 27.0 | 59.0 |
| 2021-01-06 23:21:16 | 27.0 | 59.0 |
| 2021-01-07 00:35:39 | 28.0 | 60.0 |
| 2021-01-07 00:37:03 | 27.0 | 60.0 |
+---------------------+-------------+----------+
10 rows in set (0.004 sec)
我能够根据以下代码找到每天的平均温度:
MariaDB [measurements]> select avg(temperature),datediff(sysdate(),ttime) diff
-> from measurements
-> group by diff
-> order by ttime desc limit 10;
+------------------+------+
| avg(temperature) | diff |
+------------------+------+
| 25.25000 | 0 |
| 26.02041 | 1 |
| 27.00000 | 2 |
| 26.00000 | 3 |
| 26.26490 | 4 |
| 26.08187 | 5 |
| 27.33333 | 6 |
| 28.12500 | 7 |
+------------------+------+
8 rows in set (0.010 sec)
我想获得每小时的平均温度,因此输出可以如下:
(例如,第一个读数是 2021-01-06 上午 10 点,平均温度是 28.0。此平均值是根据上午 9:00 至上午 10:00 之间的读数计算得出的)
Expected output:
+---------------------+-------------+
| ttime | AVG Temp |
+---------------------+-------------+
| 2021-01-06 10:00:00 | 28.0 |
| 2021-01-06 09:00:00 | 30.0 |
| 2021-01-06 08:00:00 | 30.0 |
| 2021-01-06 07:00:00 | 28.0 |
| 2021-01-06 06:00:00 | 27.0 |
| 2021-01-06 05:00:00 | 28.0 |
| 2021-01-06 04:00:00 | 27.0 |
| 2021-01-06 03:00:00 | 27.0 |
| 2021-01-06 02:00:00 | 28.0 |
| 2021-01-06 01:00:00 | 27.0 |
+---------------------+-------------+
每小时将有(60 分钟/5 分钟)= 12 个读数。因此每行输出包含最多 12 个读数的平均值。
我知道 timediff 命令,但不确定这会有什么帮助。
MariaDB [measurements]> select timediff(sysdate(), ttime)
-> from measurements
-> order by ttime
-> desc
-> limit 10;
+----------------------------+
| timediff(sysdate(), ttime) |
+----------------------------+
| 00:02:28 |
| 00:07:28 |
| 00:12:28 |
| 00:17:28 |
| 00:22:28 |
| 00:27:28 |
| 00:32:26 |
| 00:37:28 |
| 00:42:28 |
| 00:47:28 |
+----------------------------+
10 rows in set (0.005 sec)
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
你可以使用hour()
select avg(temperature),date(ttime), hour(ttime)
from measurements
group by date(ttime), hour(ttime)
order by date(ttime) desc, hour(ttime) desc limit 10;