0

テーブルからのみ重複レコードを見つけて更新する最良の方法は何ですか? たとえば、以下のレコードは重複と見なされ、ID のみが一意になります。レコード 2 と 3 のアクティブ フィールドを 1 ではなく 0 に更新し、日付を getdate() に設定する必要があります。これらの重複 (ID 1) の最初のインスタンスを更新しないようにする必要があります。このシナリオが何千もあるテーブルがあり、重複レコードを非アクティブ化する必要があります。

何か案は?

acct_plan テーブル:

ID  act   plan   active   date   
1   123   blue   1        NULL    
2   123   blue   1        NULL  
3   123   blue   1        NULL

助けてくれてありがとう!:)

4

4 に答える 4

1

これは、@Gordon のクエリに似ています。それを達成する別の方法を示すだけです(SQL 2005以降):

UPDATE A
SET
   A.active = 0,
   A.date = GetDate()
FROM
   (
      SELECT A.*, MinID = Min(A.ID) OVER (PARTITION BY A.act, A.[plan], A.date)
      FROM dbo.acct_plan A
      WHERE A.active = 1
   ) A
WHERE
   A.ID > A.MinID
;

SQL Fiddle でライブ デモを見る

また、Raphaël Althaus もエコーplanします。これは SQL Server の予約キーワードであり、列名には使用しないでください。クエリを解析して実行するには、単語を角かっこで囲む必要があることがわかりますが、これは理想的な状況ではありません。

于 2013-05-31T22:27:17.147 に答える
0

これは私のために働いた:

update acct_plan set active = 0, date = getdate()
where ID in 
(select ID FROM  acct_plan 
LEFT OUTER JOIN
                 (SELECT    MIN(ID) AS RowId, act, plan, active, date
                            FROM acct_plan
                            GROUP BY act, plan, active, date) 
                 AS KeepRows ON acct_plan.ID = KeepRows.RowId
WHERE (KeepRows.RowId IS NULL))
于 2013-05-31T21:59:26.303 に答える