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')