我在PostgreSQL中有一个大数据表,除其他信息外,其中包含一列开始日期和结束日期。对于每一行,我希望统计同一张表中包含重叠日期范围的其他行的数量,并使用这些值创建一个新表。
要计算重叠的日期范围,我一直打算使用:
where (start_date between [target_start_date] and [target_end_date]) or
(end_date between [target_start_date] and [target_end_date]))
但是我不知道在与自己的表进行比较并计算满足此条件的次数时,如何对每一行执行此操作。
任何想法都将不胜感激,谢谢!
答案 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;