을 삭제하려고 행복에 SQL Server 차이가 있는 날짜 또는 배치 번호

0

질문

이 검색어:

SELECT 
    T1.ID_NUMBER,                                                                    
    T1.INCEPTION_DATE,
    T1.OCCURRENCE,
    T1.TRANSACTION_DATE,
    T1.FILE_LOAD_DATE,
    T1.BATCH_NUM
FROM 
    mastertable T1
INNER JOIN 
    (SELECT 
         ID_NUMBER, INCEPTION_DATE, OCCURRENCE, 
         COUNT(*) AS DUPL_COUNT
     FROM 
         mastertable
     WHERE 
         SOURCE_SYSTEM ='LEGACY'
     GROUP BY 
         ID_NUMBER, INCEPTION_DATE, OCCURRENCE
     HAVING 
         COUNT(*) > 1) t2 ON T2.ID_NUMBER = T1.ID_NUMBER 
                          AND T2.INCEPTION_DATE = T1.INCEPTION_DATE 
                          AND T2.OCCURRENCE= T1.OCCURRENCE
ORDER BY 
    1, 2, 3, 4, 5

는 다음과 같은 결과를 반환

ID_NUMBER INCEPTION_DATE 발생 TRANSACTION_DATE FILE_LOAD_DATE BATCH_NUM
112897732 2008-09-15 4 2008-07-03 2008-07-07 17:57:19 06341
112897732 2008-09-15 4 2008-07-13 2008-07-18 03:35:55 06753
828194721 2008-11-11 1 2008-09-06 2008-09-17 02:50:44 97334
828194721 2008-11-11 1 2008-09-23 2008-09-24 02:55:27 98331
456457422 2008-09-28 1 2008-12-03 2008-07-13 08:08:39 00734
456457422 2008-09-28 1 2008-12-03 2008-07-18 13:35:55 00991
999272910 2008-05-07 3 2008-05-03 2008-10-13 08:08:38 11432
999272910 2008-05-07 3 2008-05-28 2008-10-18 03:35:55 13342
875328642 2008-03-01 3 2008-04-28 2008-01-23 08:08:38 74542
875328642 2008-03-01 3 2008-04-30 2008-01-25 12:55:11 77536
011028734 2008-07-12 2 2008-12-03 2008-08-07 11:57:03 23422
011028734 2008-07-12 2 2008-12-03 2008-08-11 17:23:29 25748
018264981 2008-07-09 0 2008-12-03 2008-12-07 02:18:12 00432
018264981 2008-07-09 0 2008-12-03 2008-12-11 17:44:19 00773

이전 FILE_LOAD_DATE 각각의 ID_NUMBER 거나 낮은 BATCH_NUM 기록하고 싶습니다.

는 방법이 있을 작성하는 쿼리를 삭제합니다 다른 레코드,아마도를 사용하여와 CTE ROW_NUMBER()?

나는 뭔가를 기대하는 건조한 경우 이 문제는 다시 일어나. 감사합니다!

(또한 그렇지 않으면 너무 많은 문제 설명하십시오 솔루션 작동 방법)

1

최고의 응답

3

당신이 사용할 수 있는 삭제 가능 CTE 여기:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ID_NUMBER, INCEPTION_DATE, OCCURRENCE
                                 ORDER BY FILE_LOAD_DATE, BATCH_NUM) rn
    FROM mastertable
    WHERE SOURCE_SYSTEM = 'LEGACY'
)

DELETE
FROM cte
WHERE rn > 1;

논리를 할당한 행 번호를 각 그룹의 기록을 가지는 같은 값 ID_NUMBER, INCEPTION_DATEOCCURRENCE. 첫 번째 행 번호 1 의 값이 할당됩 기록을 가지는 초기 FILE_LOAD_DATE. 의 케이스에서 두 개 이상의 기록 묶여 초기 FILE_LOAD_DATE의에 의해 결정됩니다 초기 BATCH_NUM.

삭제 문을 제거하는 모든 레코드 를 제외하고 이에 대한 최초의 기록이다.

2021-11-14 00:02:08

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................