2017-02-07 3 views
0

이 SQL 쿼리를 SQL에서 실행하지만 조인 구문에서 문제가있는 것으로 변환하려고합니다. 기본적으로 DWH_DATE를 기준으로 중복 행에 대해 DWH_HISTO를 1로 설정합니다. 그래서 오래된 복사본을 표시해야합니다. 내부 조인을 사용하여 업데이트하기위한 TSQL 구문

내가 내부를 사용

UPDATE MAG_L_D3.dbo.INSCRIPT 
INNER JOIN 
(SELECT MAX(DWH_DATE) as lastId, CODINS 
    FROM INSCRIPT 
    WHERE DWH_HISTO=0 
    GROUP BY CODINS 
    HAVING COUNT(*) > 1) duplic on duplic.CODINS = MAG_L_D3.dbo.INSCRIPT.CODINS 
    SET DWH_HISTO = 1 
    WHERE MAG_L_D3.dbo.INSCRIPT.DWH_DATE < duplic.lastId 

답변

3

업데이트를 시도했습니다 무엇 가입 :

;WITH CTE as 
(
    SELECT *, row_number() over (partition by CODINS order by DWH_DATE desc)rn 
) 
UPDATE CTE 
SET DWH_HISTO = 1 
WHERE 
    rn > 1 
    and DWH_HISTO=0 
4

나는 이것이 당신이 찾고있는 구문입니다 생각 : 정확히 무슨 일이 일어나고 있는지 확실치 않지만 그것을 공부할 것이다 : D 감사합니다.
+0

와우 흥미로운 구문 :

UPDATE I SET DWH_HISTO = 1 FROM MAG_L_D3.dbo.INSCRIPT I INNER JOIN (SELECT MAX(DWH_DATE) as lastId, CODINS FROM INSCRIPT WHERE DWH_HISTO=0 GROUP BY CODINS HAVING COUNT(*) > 1) duplic on duplic.CODINS = I.CODINS WHERE I.DWH_DATE < duplic.lastId 

+0

@ C.Astraea 그것은 조인 방법보다 빠릅니다. –