Mysql 从ID;。那是肯定的。我刚刚回答了另一个性质类似的问题,因为这为您创建了一个临时表。谢谢yogendra,我将尝试一下,因为它看起来更干净、更简单: SELECT [DB Type], Max(ID) AS MaxID FROM YourTable GROUP BY [DB Type] 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 DELETE FROM MyTable del WHERE EXISTS ( (SELECT * FROM MyTable xx WHERE xx."db Type" = del."db Type" AND xx.id > del.id ); delete from my_Table where Day in (select MAX(day) d from my_Table where id='id')

Mysql 从ID;。那是肯定的。我刚刚回答了另一个性质类似的问题,因为这为您创建了一个临时表。谢谢yogendra,我将尝试一下,因为它看起来更干净、更简单: SELECT [DB Type], Max(ID) AS MaxID FROM YourTable GROUP BY [DB Type] 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 DELETE FROM MyTable del WHERE EXISTS ( (SELECT * FROM MyTable xx WHERE xx."db Type" = del."db Type" AND xx.id > del.id ); delete from my_Table where Day in (select MAX(day) d from my_Table where id='id'),mysql,sql,select,Mysql,Sql,Select,我知道这听起来很混乱,但我不知道如何更好地解释它。我的表格简化如下: DB Type ID ================ Table1 1 Table1 2 Table1 3 Table1 4 Table1 5 Table2

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

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的记录-因此在这种情况下,它将是表1,5和表2,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
请先尝试按db_类型选择最大ID组,然后将其用作带有not in的子查询

编辑:

 DELETE FROM MyTable
 HAVING MAX(ID) > ID;

子查询返回每个类型的最大id,这些是要保留的值。使用左联接,我将从表中选择所有没有in-in-max_ID的行,这些行将被删除。只有当id是主键时,这才有效,否则我们还必须加入类型。

组合DB type-id是唯一的吗

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

只获取所需的行

SELECT [DB Type], Max(ID) AS MaxID
FROM YourTable
GROUP BY [DB Type]
删除将上一条语句包装成更复杂语句的其余语句;我不是这个意思

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

这正是我想做的事情,但我想不起来,不幸的是出现了这个错误-[Err]1093-您不能在中指定要更新的目标表“MyTable”clause@JazziJeff:尝试使用have子句并让我知道,如果不起作用。只是尝试了一种解决方法,这可以从MyTable中删除ID不在SELECT*中从SELECT MAXID中从MyTable组按DB类型作为tb1按ID排序ASC似乎您的编辑可以删除其他DBTYPE的所有记录?但无论如何都要感谢你的帮助,这让我的思路正确@JazziJeff:它不会出现,因为我使用的条件是MAXID>ID;。那是肯定的。我刚刚回答了另一个性质类似的问题,因为这为您创建了一个临时表。谢谢yogendra,我将尝试一下,因为它看起来更干净、更简单:
SELECT [DB Type], Max(ID) AS MaxID
FROM YourTable
GROUP BY [DB Type]
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
DELETE FROM MyTable del
WHERE EXISTS ( 
    (SELECT * 
     FROM MyTable xx
     WHERE xx."db Type" = del."db Type"
     AND xx.id > del.id
     );
delete from my_Table  
 where Day in (select  MAX(day) d from my_Table   where id='id')