2015-09-07 26 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 

請注意,這樣刪除會讓我非常緊張,因爲潛在的小錯誤導致大量數據被刪除。