遍历每一行并与PostgreSQL中的表进行比较

时间:2019-05-23 21:03:51

标签: postgresql

我在PostgreSQL中有一个大数据表,除其他信息外,其中包含一列开始日期和结束日期。对于每一行,我希望统计同一张表中包含重叠日期范围的其他行的数量,并使用这些值创建一个新表。

要计算重叠的日期范围,我一直打算使用:

where (start_date between [target_start_date] and [target_end_date]) or 
      (end_date between [target_start_date] and [target_end_date]))

但是我不知道在与自己的表进行比较并计算满足此条件的次数时,如何对每一行执行此操作。

任何想法都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

一种可能性是使用子查询和OVERLAPS运算符。

SELECT t1.*,
       (SELECT count(*)
               FROM elbat t2
               WHERE (t2.target_start_date,
                      t2.target_end_date) OVERLAPS (t1.target_start_date,
                                                    t1.target_end_date))
       FROM elbat t1;