Postgres合并重叠时间戳记录

时间:2017-07-18 15:07:23

标签: sql postgresql

我在名为xy的表格中有以下数据集

 siteid   ;    eventtime        ;     ceasetime
'LCAI2995';'2017-07-17 08:24:00';'2017-07-17 08:50:00'
'LCAI2995';'2017-07-17 08:22:00';'2017-07-17 08:50:00'
'LCAI2995';'2017-07-16 18:40:00';'2017-07-16 18:42:00'
'LCAI2995';'2017-07-16 18:39:00';'2017-07-16 18:48:00'
'LCAI2995';'2017-07-16 18:31:00';'2017-07-16 18:33:00'
'LCAI2995';'2017-07-16 18:30:00';'2017-07-16 18:38:00'
'LCAI2995';'2017-07-16 18:09:00';'2017-07-16 18:11:00'
'LCAI2995';'2017-07-16 18:08:00';'2017-07-16 18:11:00'
'LCAI2995';'2017-07-16 17:30:00';'2017-07-16 17:44:00'
'LCAI2995';'2017-07-16 17:28:00';'2017-07-16 17:45:00'
'LCAI2995';'2017-07-16 16:03:00';'2017-07-16 16:23:00'
'LCAI2995';'2017-07-16 16:01:00';'2017-07-16 16:23:00'
'LCAI2995';'2017-07-16 12:11:00';'2017-07-16 13:00:00'
'LCAI2995';'2017-07-16 12:10:00';'2017-07-16 13:01:00'
'LCAI2995';'2017-07-16 09:12:00';'2017-07-16 09:51:00'
'LCAI2995';'2017-07-16 09:11:00';'2017-07-16 09:50:00'
**'LCAI2995';'2017-07-16 08:42:00';'2017-07-16 09:04:00'**
**'LCAI2995';'2017-07-16 08:25:00';'2017-07-16 09:03:00'**
**'LCAI2995';'2017-07-16 08:23:00';'2017-07-16 08:41:00'**
'LCAI2995';'2017-07-16 07:39:00';'2017-07-16 08:21:00'
'LCAI2995';'2017-07-16 07:37:00';'2017-07-16 08:21:00'

在事件和停止时间重叠不止一次(重叠的记录突出显示) 所以我使用下面的查询来合并一个记录中的重叠记录

select * from(
with set1 as (select * from xy where cellid is null
            )

            select distinct a.siteid, case when a.eventtime < set1.eventtime then a.eventtime else set1.eventtime end , case when a.ceasetime> set1.ceasetime then a.ceasetime else set1.ceasetime end  from
            (select * from xy so where cellid is null
            )a , set1 

             where a.siteid =set1.siteid and not a.alarmid = set1.alarmid
            and ( (a.eventtime,a.ceasetime) overlaps (set1.eventtime, set1.ceasetime) or a.ceasetime - set1.eventtime ='00:00:00'::interval))x
            ORDER by x.siteid,x.eventtime asc

它的输出如下

siteid    ;    eventtime        ;     ceasetime
'LCAI2995';'2017-07-16 07:37:00';'2017-07-16 08:21:00'
**'LCAI2995';'2017-07-16 08:23:00';'2017-07-16 09:03:00'**
**'LCAI2995';'2017-07-16 08:25:00';'2017-07-16 09:04:00'**
'LCAI2995';'2017-07-16 09:11:00';'2017-07-16 09:51:00'
'LCAI2995';'2017-07-16 12:10:00';'2017-07-16 13:01:00'
'LCAI2995';'2017-07-16 16:01:00';'2017-07-16 16:23:00'
'LCAI2995';'2017-07-16 17:28:00';'2017-07-16 17:45:00'
'LCAI2995';'2017-07-16 18:08:00';'2017-07-16 18:11:00'
'LCAI2995';'2017-07-16 18:30:00';'2017-07-16 18:38:00'
'LCAI2995';'2017-07-16 18:39:00';'2017-07-16 18:48:00'
'LCAI2995';'2017-07-17 08:22:00';'2017-07-17 08:50:00'

问题在于它合并了4个重叠的记录(在第一个表中突出显示)并产生了另外2个重叠的记录(在上表中突出显示)!

问题是我如何递归地运行上述查询,以便它保持合并记录直到没有重叠?知道表xy包含很多siteid(上面只是一个例子)。

0 个答案:

没有答案