我有一个应用程序可以记录某台机器的三种状态.我需要报告机器每天从00:00:00到23:59:59在每个州停留的时间.
我需要一个帮助来构建一个postgresql查询,以获取某个事件在一天中发生的整个时间间隔.
例如,如下图所示,数据显示在前一天23:50:00到第二天01:00:00之间.
device_id varchar(50) | Value int4 | Date_time timestamptz |
---|---|---|
device1 | 0 | 2022-23-04 23:50:00 |
device1 | 0 | 2022-24-04 00:10:00 |
device1 | 0 | 2022-24-04 00:15:00 |
device1 | 0 | 2022-24-04 00:20:00 |
device1 | 1 | 2022-24-04 00:25:00 |
device1 | 1 | 2022-24-04 00:30:00 |
device1 | 1 | 2022-24-04 11:00:00 |
device1 | 0 | 2022-24-04 21:00:00 |
device1 | 1 | 2022-25-04 01:00:00 |
我在计算状态变化之间的持续时间,我也在表格中插入,我只是简单地求和,但它给出了以下结果:
总计:
- 状态=0-04:35
- 州=1-20:35
- 两者之和=25:10:00
我需要的查询应该考虑到不是2021年4月24日的其他日期的时间部分,并且必须给出:
2022年4月24日总计:
- 州=0-03:25
- 州=1-20:35
- 两者之和=24:00:00
在每天的和中,我需要计算机器在每个状态下停留的时间百分比,并绘制一个饼图.
有没有一种方法可以满足这种需求?
提前感谢大家的帮助.
@shawnt00回答有效.现在,我试图找出如何组织数据,以便查询结果如下所示:
device_id | state_0 | state_1 | state_9 |
---|---|---|---|
device_id | timespan_state_0 | timespan_state_1 | timespan_state_9 |
对于给定的示例,应该如下图所示,我添加了第二个设备以增强示例:)
device_id | state_0 | state_1 | state_9 |
---|---|---|---|
device1 | 03:25 | 20:35 | 00:00 |
device2 | X | Y | Z |
那个.
赢家马丁斯