我使用电子邮件自动回复软件将联系人(即人,姓名,电子邮件地址等)分配给自动回复(即他们订阅的邮件序列)。
碰巧有些人订阅了两次相同的自动回复。
然后表格如下:
id contact_id autoresponder_id stamp_subscribe other_stuff
1 1 5 1430400000 slkdfj
2 2 5 1430402085 oweuoe
3 1 5 1430402085 iclksls
我正在尝试找到一个MySQL查询...
匹配将相同contact_id分配给autoresponder_id =“5”两次或更多次的所有条目,忽略所有other_stuff(在示例中:行ID 1和ID 3)
在为任何contact_id找到的所有内容中,删除除最旧版本之外的所有内容(即具有最低stamp_subscribe值的内容;在示例中:行ID 3将被删除,保留行ID为1的旧条目)< / p>
答案 0 :(得分:0)
我会使用子查询来查找contact_id / autoresponder_id的所有第一条记录,并将该子查询与LEFT OUTER JOIN连接到主表。然后删除没有匹配记录的所有行。
DELETE a
FROM sometable a
LEFT OUTER JOIN
(
SELECT id
FROM
(
SELECT contact_id, autoresponder_id, MIN(id) AS id
FROM sometable
GROUP BY contact_id, autoresponder_id
) sub0
) b
ON a.id = b.id
WHERE b.id IS NULL
请注意,这样的删除会让我非常紧张,因为可能会出现轻微错误导致大量数据被删除。