我已经阅读了很多关于处理重复项的问题,它们帮助我编写了我拥有的 SQL,但我的任务是删除重复项,而不是基于重复字段,而是基于另一个字段。
在我的项目中,我根据三个列相等来定义重复项,但是有一个永远不会*重复的第四列事务日期/时间。我想保留最新的交易并丢弃旧的交易。
这是我已经拥有的
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 年 6 月 19 日 19:09:16 67 [活动?] 1099608160 2012 年 6 月 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 用户 ID_lst 1044317178 2012 年 6 月 21 日 15:26:24 74 用户 ID_lst 1044317178 2012 年 6 月 21 日 15:27:15 74 用户 ID_lst 1044317178 2012 年 6 月 21 日 15:28:50
好吧,这很好,花花公子我有重复的列表,你可以看到记录 74 有三个重复。但我想要的只是最新时间的副本。所以我有这个查询..
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 2012 年 6 月 19 日 19:09:17 67 [活动?] 1099608160 2012 年 6 月 21 日 15:21:42 68 Url_lst 1107138998 2012 年 6 月 21 日 15:28:50 74 用户 ID_lst 1044317178
啊! 现在我有一个我想要保留的列表,即使有记录 74 我也只有最新的条目。但我真正想要的是删除其他重复项。这就是我似乎遇到了心理障碍的地方。如何编写一个只删除较旧的重复项(保留最后一个)而不是任何其他非重复记录的查询?