3

我知道这听起来很混乱,但我不知道如何更好地解释它。我在下面有一个简化的表格:

DB Type       ID
================
Table1         1                 
Table1         2                 
Table1         3                 
Table1         4                 
Table1         5                 
Table2         6                 
Table2         7                 
Table2         8                 
Table2         9                 
Table2        10 

我想要实现的是基本上清理这个表,但如果有意义的话,保留每个 DB 类型的最高 ID 的记录 - 所以在这种情况下,它将是 (Table1,5) 和 (Table2,10)其他记录被删除。是否可以通过 MySQL 专门执行此操作?

*编辑***

感谢 Yogendra Singh 的提示回答

DELETE FROM MyTable WHERE ID NOT IN (SELECT * FROM (SELECT MAX(ID) from MyTable GROUP BY DB Type) AS tb1 ) ORDER BY ID ASC
4

5 回答 5

3

尝试先选择最大IDdb_type,然后将其用作子查询not in

 DELETE FROM MyTable 
 WHERE ID NOT IN 
    (SELECT ID FROM 
      (SELECT MAX(ID) AS ID from MyTable GROUP BY DB Type) AS tb1
    )

编辑:

 DELETE FROM MyTable
 HAVING MAX(ID) > ID;
于 2012-11-28T16:39:09.143 回答
1
delete your_table
from
  your_table left join
  (select max(id) max_id from your_table group by type) mx
  on your_table.id=mx.max_id
where mx.max_id is null

子查询返回每种类型的最大 id,这些是要保留的值。通过左连接,我从表中选择 max_ids 中没有 in 的所有行,这些行是要删除的行。这仅在 id 是主键时才有效,否则我们还必须加入类型。

于 2012-11-28T16:50:18.510 回答
1

DB Type - ID 组合是否唯一?

如果是这样,您可以分两个阶段进行攻击:

  1. 只获取你想要的行

    SELECT [DB Type], Max(ID) AS MaxID
    FROM YourTable
    GROUP BY [DB Type]
    
  2. 删除其余部分(将前面的语句包装成更复杂的语句;不是那个意思)

    DELETE FROM YourTable
    FROM
        YourTable
        LEFT JOIN
        (SELECT [DB Type], Max(ID) AS MaxID
         FROM YourTable GROUP BY [DB Type]) DontDelete
        ON
          YourTable.[DB Type]=DontDelete.[DB Type] AND
          YourTable.ID=DontDelete.MaxID
    WHERE
      DontDelete.[DB Type] IS NULL
    
于 2012-11-28T17:25:15.190 回答
0
DELETE FROM MyTable del
WHERE EXISTS ( 
    (SELECT * 
     FROM MyTable xx
     WHERE xx."db Type" = del."db Type"
     AND xx.id > del.id
     );
于 2012-11-28T17:41:25.510 回答
0
delete from my_Table  
 where Day in (select  MAX(day) d from my_Table   where id='id')
于 2013-06-19T05:46:07.020 回答