MYSQL删除同一组中的重复记录,只保留一个

时间:2013-12-12 10:07:01

标签: mysql sql group-by sql-delete duplicate-removal

我搜索但所有问题都出现了删除重复记录并且只保留了一个最新的表格,但我有点不同,我想删除同一组中的重复记录但只保留该组的最新记录。这是一个例子:

ID  Device_ID    Time                   Content Text
1   abc          2013-11-30 15-30-01    I love you
2   abc          2013-11-30 15-30-01    I love you
3   def          2013-10-30 12-12-02    I love you
4   def          2013-10-30 12-12-02    I love you
5   ghj          2013-09-30 11-12-02    I love you
6   ghj          2013-09-30 11-12-02    I love you

因此有些设备与其他设备具有相同的内容,我想找到一种方法来删除每个设备ID中的重复内容并删除重复内容并保留最新内容。

如果我按内容文本选择分组,然后从那里删除它,那么它也会从其他设备中删除所有其他内容,我不能这样做。

假设我有5000万条记录。那么有没有办法可以删除每个设备ID上的重复记录,结果就像只有我喜欢你在每个设备ID上的内容文字。

我无法在惰性期间将我的列内容文本设置为唯一,因为可能有一些设备ID使用相同的内容文本。或者也许是唯一的时间,但每个设备ID可能会插入相同的时间,但差异内容文本......

我想要res

ID  Device_ID    TimeContent            Text

2   abc          2013-11-30 15-30-01    I love you

4   def          2013-10-30 12-12-02    I love you

6   ghj          2013-09-30 11-12-02    I love you

3 个答案:

答案 0 :(得分:4)

尝试:

DELETE FROM tblA 
WHERE id NOT IN (
          SELECT DISTINCT id FROM (
          SELECT  MAX(id) as id FROM tblA 
          GROUP BY Device_ID, Time, ContentText 
          HAVING COUNT(*) > 1 ) A          
    );

请参阅Demo

答案 1 :(得分:3)

试试这个:

DELETE FROM TableA  
WHERE id NOT IN (SELECT id 
                 FROM(SELECT MAX(id) id FROM TableA t
                      GROUP BY t.Device_ID, t.Time, t.ContentText HAVING COUNT(*) > 1
                     ) AS A       
                );

检查SQL FIDDLE DEMO

<强>输出

| ID | DEVICE_ID |                TIME | CONTENTTEXT |
|----|-----------|---------------------|-------------|
|  2 |       abc | 2013-11-30 15-30-01 |  I love you |
|  4 |       def | 2013-10-30 12-12-02 |  I love you |
|  6 |       ghj | 2013-09-30 11-12-02 |  I love you |
| 13 |      ghj1 | 2013-09-30 11-12-02 |  I love you |

答案 2 :(得分:0)

NVM我发现问题只是切换计数*&gt; 1到0,它不会删除非重复的