重叠日期

问题描述 投票:0回答:2

*编辑 - 没有更新权限。

我有以下表格:id应仅与一个区域相关联。 TableB上有重叠。因此约翰于19/9/19与东区和中东区相关联。

我可以操纵TableB来修复重叠吗?

所以,最古老的行enddate (1/9/19) would change to 1/7/19.

可能会有一天以上的重叠。

在这里使用LeadLag?不知道从哪里开始。

表A

CustDate   id   Name
1/9/19      1   John

表B

StartDate   EndDate      AREA
 1/1/2019    1/9/19      East
 1/8/2019    12/31/4000  Mideast

示例SQL

 ,CASE WHEN ENDDATE >
LEAD(STARTDATE) OVER (PARTITION BY ID ORDER BY STARTDATE) 
THEN MIN(ENDDATE) OVER (PARTITION BY ID) - interval '1' day
ELSE ENDATE
END END_DT2
sql oracle lag lead
2个回答
2
投票

您可以通过更新TableB来修复enddate

update tableb b
    set enddate = (select min(startdate) - interval '1' day
                   from tableb b2
                   where b2.startdate > b.startdate
                  );

或者,将此表达为select

select b.startdate,
       lead(b.startdate, 1, date '4000-12-31') over (order by b.startdate) - interval '1' day as enddate,
       b.area
from tableb b;

0
投票

也许LeadLag

如下所示:

  ,CASE
   WHEN ENDDATE > LEAD(STARTDATE) OVER (PARTITION BY ID ORDER BY STARTDATE) 
   THEN LEAD (STARTDATE) OVER (PARTITION BY ID ORDER BY STARTDATE) -1
               ELSE ENDDATE
               END END_DT
© www.soinside.com 2019 - 2024. All rights reserved.