2015-09-07 28 views
-3

我使用电子邮件自动回复软件将联系人(即人员,姓名,电子邮件地址等)分配给自动回复(即,他们已经订阅)。匹配部分重复的行(并且删除除最老的之外的所有行)

恰巧有些人订阅了两次相同的自动回复。

,则表看起来是这样的:

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查询......

  1. 匹配,其中相同CONTACT_ID被分配到autoresponder_id所有条目=“ 5“两次或更多,忽略所有other_stuff(在该示例中:行ID 1和ID 3)

  2. 在所有找到的contact_id中,删除除最老的与最低stamp_subscribe价值;在例如:线ID 3将被删除,留下一行ID的较早的项目1)

+0

提交你的代码,你自己试过了 –

回答

0

我会用一个子查询来发现所有的CONTACT_ID/autoresponder_id第一的记录,并加入该子查询与一个左外部联接到您的主表。然后删除没有匹配记录的所有行。

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 

请注意,这样删除会让我非常紧张,因为潜在的小错误导致大量数据被删除。