Пересекающиеся даты - PullRequest
       10

Пересекающиеся даты

0 голосов
/ 19 апреля 2019

* Редактировать - Нет прав на обновление.

У меня есть таблицы ниже: идентификатор должен быть связан только с одной областью.В Таблице В есть совпадение.Поэтому Джон 1/9/19 связан с районом Восток и Средний Восток.

Можно ли манипулировать таблицей B, чтобы исправить перекрытие?

Итак, самая старая строка 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

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

Вы можете исправить 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 голосов
/ 19 апреля 2019

Возможно 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
...