回答編集履歴
1
補足追加
answer
CHANGED
@@ -12,13 +12,14 @@
|
|
12
12
|
, size_name
|
13
13
|
, insert_date
|
14
14
|
, ROW_NUMBER() OVER
|
15
|
-
(PARTITION BY
|
15
|
+
(PARTITION BY -- 重複検査をしたいカラムをここで並べる
|
16
16
|
model
|
17
17
|
, color_code
|
18
18
|
, color_name
|
19
19
|
, size_code
|
20
20
|
, size_name
|
21
|
-
ORDER BY insert_date ASC
|
21
|
+
ORDER BY insert_date ASC -- 一番古い物を残すため昇順
|
22
|
+
) AS record_num
|
22
23
|
FROM
|
23
24
|
dbo.order1_trn
|
24
25
|
) x
|
@@ -29,4 +30,16 @@
|
|
29
30
|
|
30
31
|
そして、1を除去してやれば、重複している残りだけになります。
|
31
32
|
|
32
|
-
あとはこれをUPDATEに組み込めば終わりです。
|
33
|
+
あとはこれをUPDATEに組み込めば終わりです。
|
34
|
+
|
35
|
+
|
36
|
+
基本的には、対象となるレコードを抽出するSELECT分を作ることをとにかく考えることです。
|
37
|
+
|
38
|
+
|
39
|
+
重複の抽出には色々と方法がありますが、たとえばGROUP BYしてinsert_date の最小値を取ってそれ以外とする場合、万が一、**insert_dateまで同じレコード**があった場合に処理が漏れることになります。
|
40
|
+
|
41
|
+
そんなデータは絶対にない!という場合でも、重複の検査に使う model などにNULLがある場合を考えると面倒なことになります。
|
42
|
+
|
43
|
+
それも絶対にありえない!という確証があればそれでもいいですけれど、確認を怠ると面倒なことになります。
|
44
|
+
|
45
|
+
そういう細かい条件(実際にどのようなデータがあるか)は作るSQLにも影響しますので、可能な限り事前に確認するよう心がけましょう。
|