回答編集履歴

1

補足追加

2021/08/19 14:13

投稿

ishina_yum
ishina_yum

スコア509

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  , ROW_NUMBER() OVER
28
28
 
29
- (PARTITION BY
29
+ (PARTITION BY -- 重複検査をしたいカラムをここで並べる
30
30
 
31
31
  model
32
32
 
@@ -38,7 +38,9 @@
38
38
 
39
39
  , size_name
40
40
 
41
- ORDER BY insert_date ASC) AS record_num
41
+ ORDER BY insert_date ASC -- 一番古い物を残すため昇順
42
+
43
+ ) AS record_num
42
44
 
43
45
  FROM
44
46
 
@@ -61,3 +63,27 @@
61
63
 
62
64
 
63
65
  あとはこれをUPDATEに組み込めば終わりです。
66
+
67
+
68
+
69
+
70
+
71
+ 基本的には、対象となるレコードを抽出するSELECT分を作ることをとにかく考えることです。
72
+
73
+
74
+
75
+
76
+
77
+ 重複の抽出には色々と方法がありますが、たとえばGROUP BYしてinsert_date の最小値を取ってそれ以外とする場合、万が一、**insert_dateまで同じレコード**があった場合に処理が漏れることになります。
78
+
79
+
80
+
81
+ そんなデータは絶対にない!という場合でも、重複の検査に使う model などにNULLがある場合を考えると面倒なことになります。
82
+
83
+
84
+
85
+ それも絶対にありえない!という確証があればそれでもいいですけれど、確認を怠ると面倒なことになります。
86
+
87
+
88
+
89
+ そういう細かい条件(実際にどのようなデータがあるか)は作るSQLにも影響しますので、可能な限り事前に確認するよう心がけましょう。