我在mysql数据库中有一个数据表,其中包含时间序列数据
**Table Sensor Data**
ID uuid server_time
1 a 2021-07-29 11:36:15
2 b 2021-07-29 11:36:15
3 a 2021-07-29 12:36:15
4 b 2021-07-29 11:39:15现在,对于每个具有给定uuid的传感器,如果根据server_time的下一次数据输入间隔超过30分钟,则将其视为离线输入,如果间隔小于30分钟,则将其视为在线输入。我需要找到一个月内在线条目和离线条目的总数。因为这个数据非常大,所以我不想在应用程序中这样做。如何使用查询或某些函数/脚本在数据库中完成此操作?
发布于 2021-08-05 15:08:18
您可以使用lead()和聚合:
select year(server_time), month(server_time),
sum( next_server_time < server_time + interval 30 minute ) as cnt_online,
sum( next_server_time >= server_time + interval 30 minute ) as cnt_offline
from (select sd.*,
lead(server_time) over (partition by uuid) as next_server_time
from sensordata sd
) sd
group by year(server_time), month(server_time)https://stackoverflow.com/questions/68668721
复制相似问题