重複の処理に関する多くの質問を読み、それらは私が持っている SQL を書くのに役立ちましたが、私の探求は、重複フィールドではなく別のフィールドに基づいて重複を削除することです。
私のプロジェクトでは、3 つの列が等しいことに基づいて重複を定義していますが、重複することのない 4 番目の列トランザクションの日付/時刻があります。最新のトランザクションを保持し、古いトランザクションを破棄したい。
ここに私がすでに持っているものがあります
SELECT Table_A.Fld1, Table_A.Fld2, Table_A.Fld3, Table_A.Fld4, Table_A.Date_Updated
FROM Table_A INNER JOIN
(SELECT Table_A.Fld2, Table_A.Fld3, Table_A.Fld4 FROM Table_A GROUP BY Table_A.Fld2, Table_A.Fld3, Table_A.Fld4 HAVING count(*)>1) AS Temp
ON (Table_A.Fld4 = Temp.Fld4) AND (Table_A.Fld3 = Temp.Fld3) AND (Table_A.Fld2 = Temp.Fld2);
これにより、重複リストが生成されます
FLD_reUpdates_qry Fld2 Fld3 Fld4 Date_Updated 6 ユーザー ID_lst 1394522856 2012 年 6 月 21 日 15:21:59 6 ユーザー ID_lst 1394522856 2012 年 6 月 21 日 15:22:21 67 [活動中?] 1099608160 2012/06/19 19:09:16 67 [活動中?] 1099608160 2012/06/19 19:09:17 68 Url_lst 1107138998 2012/6/21 15:21:16 68 Url_lst 1107138998 2012/6/21 15:21:42 74 User_ID_lst 1044317178 2012/6/21 15:26:24 74 User_ID_lst 1044317178 2012/06/21 15:27:15 74 User_ID_lst 1044317178 2012/6/21 15:28:50
これは問題ありません。重複のリストがあります。ご覧のとおり、レコード 74 には 3 つの重複があります。しかし、私が欲しいのは、最新の時間の重複です。だから私はこのクエリを持っています..
SELECT max(date_updated) AS LatestUpdate, Table_A.Fld2, Table_A.Fld3, Table_A.Fld4
FROM Table_A
GROUP BY Table_A.Fld2, Table_A.Fld3, Table_A.Fld4
HAVING count(1)> 1;
次のリストを生成します...
FLD_LatestReupdates_Qry 最新の更新 Fld2 Fld3 Fld4 2012 年 6 月 21 日 15:22:21 6 User_ID_lst 1394522856 6/19/2012 19:09:17 67 [アクティブ?] 1099608160 2012 年 6 月 21 日 15:21:42 68 Url_lst 1107138998 2012 年 6 月 21 日 15:28:50 74 User_ID_lst 1044317178
ああ!これで、保持したいもののリストができました。レコード 74 を使用しても、最新のエントリしかありません。しかし、私が本当に欲しいのは、他の重複を削除することです。そして、それは私が精神的なブロックに遭遇したように見えるところです. 古い重複レコードのみを削除し (最後のレコードを保持)、他の重複していないレコードは削除しないクエリを作成するにはどうすればよいですか?