Обновите самую старую запись, где существует перекрытие - PullRequest
0 голосов
/ 08 февраля 2019

У меня много неточных записей;аналитик загрузил данные без обработки, поэтому в этой базе данных у меня есть много перекрывающихся дат между строками в INI и FIN, например:

valido ID  id_tip id_hr  perpro    rut         ini                      fin                     ult_act
------ --- ------ ----- --------- ---------- ------------------------- ----------------------- ----------------------
1      52   001    666   201802    6666666-6   2018-05-01 00:00:00.000 2018-05-10 00:00:00.000 2018-09-12 00:00:00.000
1      53   001    666   201802    6666666-6   2018-05-09 00:00:00.000 2018-05-12 00:00:00.000 2018-09-13 00:00:00.000

Для этого я хочу создать CTE / StoredПроцедура, которая отображает обе записи : ту, которая перекрыта, и ту, с которой она перекрывается.Затем обновите самый старый на основе ULT_ACT, который является отметкой времени, когда он был загружен.Мой текущий выбор может распечатать более старую запись, которая перекрывается с новой, и те, которые имеют совпадающие даты INI2 и FIN1:

SELECT ROW_NUMBER() OVER (PARTITION BY ID_HR ORDER BY ULT_ACT ASC) AS IDOR, 
T.ID, 
T.RUT, 
CONVERT(VARCHAR,T.INI,112) AS INI,
CONVERT(VARCHAR,T.FIN,112) AS FIN, 
CONVERT(VARCHAR,T.ULT_ACT,112) AS ULT_ACT
FROM TSTSOLAP t 
WHERE EXISTS 
    (
        SELECT 1 FROM TSTSOLAP T2 
        WHERE t.RUT = t2.RUT AND
            T.ID_TIP = T2.ID_TIP AND
            T.ID <> t2.ID AND 
            (T2.INI BETWEEN T.INI AND T.FIN)
            OR T2.INI = T.FIN
            --T2.INI < T.FIN OR
            --T2.INI = T.FIN
            --OR t.INI <= t2.FIN
    )
ORDER BY ID
--UPDATE I WANT TO IMPLEMENT, IT CHANGES FIN AND SETS IT TO T2.INI - 1 SO IT REMOVES THE OVERLAPPED CONDITION
--UPDATE TSTSOLAP SET T.FIN=INI-1 WHERE IDOR > 1

Который печатает это:

valido ID  id_tip id_hr  perpro    rut         ini                      fin                     ult_act
------ --- ------ ----- --------- ---------- ------------------------- ----------------------- ----------------------
1      52   001    666   201802    6666666-6   2018-05-01 00:00:00.000 2018-05-10 00:00:00.000 2018-09-12 00:00:00.000

Мне нужна помощь в печати обоих случаев и реализации обновления более "исполняемым" способом.

...