如何找到与下一个事件重叠的天数。下一个事件表示相对于开始日期将发生的事件

问题描述 投票:-1回答:1
Eventid start_date  end_date    City
1   2015-02-01  2015-02-04  Chennai
2   2015-02-02  2015-02-05  Chennai
4   2015-02-04  2015-02-06  Mumbai
3   2015-02-03  2015-02-07  Chennai
6   2015-02-08  2015-02-10  Kolkata
5   2015-02-06  2015-02-09  Mumbai
7   2015-02-10  2015-02-11  Kolkata
sql postgresql overlapping
1个回答
0
投票

使用Postgres,将date rangeintersection operator *window function一起使用非常容易:

with diffs as (
  select eventid, start_date, end_date, city,
         daterange(start_date, end_date, '[]') * lead(daterange(start_date, end_date, '[]')) over (partition by city order by start_date) as overlap
  from events
)
select eventid, start_date, end_date, city,
       upper(overlap) - lower(overlap) as num_days
from diffs
order by city, start_date;

给出您的样本数据,将返回:

eventid | start_date | end_date   | city    | num_days
--------+------------+------------+---------+---------
      1 | 2015-02-01 | 2015-02-04 | Chennai |        3
      2 | 2015-02-02 | 2015-02-05 | Chennai |        3
      3 | 2015-02-03 | 2015-02-07 | Chennai |         
      6 | 2015-02-08 | 2015-02-10 | Kolkata |        1
      7 | 2015-02-10 | 2015-02-11 | Kolkata |         
      4 | 2015-02-04 | 2015-02-06 | Mumbai  |        1
      5 | 2015-02-06 | 2015-02-09 | Mumbai  |         

Online example

© www.soinside.com 2019 - 2024. All rights reserved.