2017-02-07 14 views
0

このmysqlクエリを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

Updateが参加しようとしたものです:

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 
4

私は、これはあなたが探している構文であると考えている:

;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 
+0

すごい面白い構文:正確に何が起こっているのかわからないが、それを勉強する:Dありがとう –

+0

@ C.Astraeaこれはjoinメソッドより高速です –