Sql 重叠日期
*编辑-无更新权限 我有以下表格:一个id应该只与一个区域关联。表B上有重叠部分。因此,19年9月1日的约翰与东部和中东地区有关 我可以操纵TableB来修复重叠吗 因此,最早的行Sql 重叠日期,sql,oracle,lag,lead,Sql,Oracle,Lag,Lead,*编辑-无更新权限 我有以下表格:一个id应该只与一个区域关联。表B上有重叠部分。因此,19年9月1日的约翰与东部和中东地区有关 我可以操纵TableB来修复重叠吗 因此,最早的行enddate(1/9/19)将更改为1/7/19。 可以有一天以上的重叠 Lead和或Lag是否在此处使用?不知道从哪里开始 表 CustDate id Name 1/9/19 1 John 表B StartDate EndDate AREA 1/1/2019 1/9/1
enddate(1/9/19)将更改为1/7/19。
可以有一天以上的重叠
Lead
和或Lag
是否在此处使用?不知道从哪里开始
表
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
您可以通过更新
enddate
来修复TableB
:
update tableb b
set enddate = (select min(startdate) - interval '1' day
from tableb b2
where b2.startdate > b.startdate
);
或者,将其表示为选择:
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;
您可以通过更新enddate
来修复TableB
:
update tableb b
set enddate = (select min(startdate) - interval '1' day
from tableb b2
where b2.startdate > b.startdate
);
或者,将其表示为选择:
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
可能是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
TableA
与这个问题有什么关系?正确。你可以不参考表A而回答这个问题,但可以添加以直观地显示我的姓名问题与多个区域相关。除了StartDate、EndDate、AREA
之外,在表B中是否有类似id
的列引用John的id?表A
与这个问题有什么关系?正确。你可以不参考表A而回答这个问题,但可以添加以直观地显示我的姓名问题与多个区域相关联。除了StartDate、EndDate、AREA
之外,在表B中是否有类似id
的列引用John的id?如果这不是你问题的答案,编辑您的问题并将代码放入其中,然后删除此帖子。如果这不是您问题的答案,请编辑您的问题并将代码放入其中,然后删除此帖子。