2015-01-20 4 views
0

아래 주어진 데이터 세트에 대해 나중에 타임 스탬프가있는 행을 제거하고 싶습니다.조건에 따라 중복 제거

**37C1Z2990E5E0 (TRXID) should be UNIQUE** in the below dataSet 

    JKLAMMSDF123 20141112 20141117 5000.0 P 1.22 RT101018 *2014-11-12 10:10:26* 37C1Z2990E5E0 101018 
    JKLAMMSDF123 20141110 20141114 5000.0 P 1.22 RT161002 *2014-11-12 10:11:33* 37C1Z2990E5E0 161002 

-- More rows 
+0

당신은 할 수 없습니다 심지어 당신이 경우 하나 개 이상의 중복을 작동합니다. 이 비정규 화 된 데이터 세트입니까? –

+0

timestamp [BETWEEN] (https://msdn.microsoft.com/en-us/library/ms187922.aspx) 다른 두 개의 결과가있는 경우에만 관심이 있습니까? – ryanyuyu

+0

TRXID를 고유 한 값으로 취할 수 있고 중복이 허용되지 않는다는 것을 의미했습니다. – SHinny

답변

1

이 시도 :

;WITH DATA AS 
(
    SELECT TRXID, MAX(YourTimestampColumn) AS TS 
    FROM YourTable 
    GROUP BY TRXID 
    HAVING COUNT(*) > 1 
) 
DELETE T 
FROM YourTable AS T 
INNER JOIN DATA AS D 
    ON T.TRXID = D.TRXID 
    AND T.YourTimestampColumn = D.TS; 
+0

이것은 모든 행을 고르고 복제 할뿐만 아니라 ... – SHinny

+0

이제 시도해 볼 수 있습니다. 멋진 해결책에 대해 – dario

+0

고마워. – SHinny

0

다른 모든 열을 기준으로 시간 소인 열과 그룹을 선택하십시오.

SELECT MIN(TIMESTAMP), C1, C2, C3... 
FROM YOUR_TABLE 
GROUP BY C1, C2, C3.. 
0

내가 window function 플러스 CTE를 사용하여이 작업을 수행 할 것입니다.

중복을 제거한 후 결과를 확인하려면 이것을 사용하십시오.

;WITH DATA 
    AS (SELECT *, 
       Row_number()OVER(partition BY TRXID ORDER BY YourTimestampColumn) rn 
     FROM YourTable) 
select * 
FROM data 
WHERE rn = 1 

delete에 사본이 사용됩니다.

;WITH DATA 
    AS (SELECT *, 
       Row_number()OVER(partition BY TRXID ORDER BY YourTimestampColumn) rn 
     FROM YourTable) 
DELETE FROM data 
WHERE rn > 1 

이 한 테이블에서 PK의 동일한 값에 같은 TRXID