teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足追加

2021/08/19 14:13

投稿

ishina_yum
ishina_yum

スコア509

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) AS record_num
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にも影響しますので、可能な限り事前に確認するよう心がけましょう。