Выберите правильные даты вступления в силу с задним числом и сценарий будущих дат - PullRequest
0 голосов
/ 31 мая 2018

Сценарий 1:

Table as,
IF OBJECT_ID('TEMPDB..#RUN_ID') IS NOT NULL
DROP TABLE #RUN_ID

;WITH RUN_ID as ( 

SELECT 1 AS RUN_ID,1 AS EMP_ID, '1/1/2018' STARTDT, 'A' AS VALUE
UNION
SELECT 2 AS RUN_ID,1 AS EMP_ID, '2/1/2018' STARTDT, 'A' AS VALUE
UNION
SELECT 3 AS RUN_ID,1 AS EMP_ID, '12/1/2017' STARTDT, 'A' AS VALUE
UNION
SELECT 4 AS RUN_ID,1 AS EMP_ID, '3/1/2018' STARTDT, 'A' AS VALUE
UNION
SELECT 5 AS RUN_ID,1 AS EMP_ID, '2/1/2018' STARTDT, 'A' AS VALUE
    )

SELECT * INTO #RUN_ID from RUN_ID

RUN_ID  EMP_ID  STARTDT VALUE
1   1   1/1/2018    A
2   1   2/1/2018    A
3   1   12/1/2017   A
4   1   3/1/2018    A
5   1   2/1/2018    A

RUN_ID - это ежедневное добавочное значение в таблице.VALUE Столбец может быть одинаковым или разным.Необходимо получить результат для STARTDT, как показано ниже:

RUN_ID  EMP_ID  STARTDT VALUE
3   1   12/1/2017   A
5   1   2/1/2018    A

Примечание: последние записи RUN ID 5 закончились записью всех других записей, где StartDt записи от 1.02.2008 находится в цели иВ результате должен быть получен идентификатор RUN 3, так как он перезаписывает предыдущий идентификатор RUN StartDT

Сценарий 2:

RUN_ID  EMP_ID  STARTDT VALUE
1   1   1/1/2018    A
2   1   11/1/2017   A
3   1   12/1/2017   A
4   1   3/1/2018    A
5   1   2/1/2018    A

В этом случае результат должен быть

RUN_ID  EMP_ID  STARTDT VALUE
2   1   11/1/2017   A
3   1   12/1/2017   A
5   1   2/1/2018    A

1 Ответ

0 голосов
/ 08 июня 2018

ЕСЛИ OBJECT_ID ('TEMPDB .. # RUN_ID') НЕ ОБНОВЛЯЕТСЯ ТАБЛИЦА УДАЛЕНИЯ # RUN_ID

; С RUN_ID как (

ВЫБРАТЬ 1 как RUN_ID, 1 как EMP_ID, CAST ('1/1/2018 «КАК ДАТА» STARTDT, «A» В КАЧЕСТВЕ СОЮЗА ВЫБРАТЬ 2 В КАЧЕСТВЕ RUN_ID, 1 КАК EMP_ID, CAST («11/1/2017» В КАКЕ ДАТЫ) STARTDT, «А» В КАЧЕСТВЕ СОЮЗА ВЫБРАТЬ 3 КАК RUN_ID, 1 КАК EMP_ID, CAST ('12 / 1/2017 'КАК ДАТА) STARTDT,' A 'КАК СОЮЗ ЗНАЧЕНИЯ ВЫБРАТЬ 4 КАК RUN_ID, 1 КАК EMP_ID, CAST (' 3/1/2018 'КАК ДАТА) STARTDT,' A'AS VALUE UNION ВЫБРАТЬ 5 AS RUN_ID, 1 AS EMP_ID, CAST (' 2/1/2018 'AS DATE) STARTDT,' A 'AS VALUE)

ВЫБРАТЬ * INTO #RUN_ID из RUN_ID

ВЫБРАТЬ * ОТ (ВЫБРАТЬ *, LAG (STARTDT) НАД (РАЗДЕЛЕНИЕ ПО EMP_ID ПОРЯДОК ПО RUN_ID DESC) LAG_DATE, СЛУЧАЙ, КОГДА ЗАДЕРЖКА (STARTDT) НАД (РАЗДЕЛЕНИЕ ПО EMP_ID ПОРЯДОК RUN_ID DESC) НУЛЯЕТ ТОЛЬКО 0, КОГДА НАЧИНАЕТСЯSTARTDT) OVER (PARTITION по EMP_ID ORDER BY RUN_ID DESC) THEN 0 ELSE 1 END SCD_IND FROM (SELECT *, RANK () OVER (PARTITION по EMP_ID, STARTDT ORDER BY RUN_ID DESC) RN FROM #RUN_ID) A WHERE A.R =) А ГДЕE SCD_IND = 0

RUN_ID EMP_ID STARTDT VALUE RN LAG_DATE SCD_IND 5 1 2018-02-01 A 1 NULL 0 3 1 2017-12-01 A 1 2018-03-01 0 2 1 2017-11-01A 1 2017-12-01 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...