*编辑 - 没有更新权限。
我有以下表格:id应仅与一个区域相关联。 TableB上有重叠。因此约翰于19/9/19与东区和中东区相关联。
我可以操纵TableB来修复重叠吗?
所以,最古老的行enddate (1/9/19) would change to 1/7/19.
可能会有一天以上的重叠。
在这里使用Lead
和Lag
?不知道从哪里开始。
表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
您可以通过更新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;
也许Lead
和Lag
如下所示:
,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