Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 重叠日期_Sql_Oracle_Lag_Lead - Fatal编程技术网

Sql 重叠日期

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

*编辑-无更新权限

我有以下表格:一个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/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?如果这不是你问题的答案,编辑您的问题并将代码放入其中,然后删除此帖子。如果这不是您问题的答案,请编辑您的问题并将代码放入其中,然后删除此帖子。