[英]Delete records from a table where < max number for a field and keep highest number
我知道這聽起來很混亂,但我不知道如何更好地解釋它。 我有一個簡化的表格如下:
DB Type ID
================
Table1 1
Table1 2
Table1 3
Table1 4
Table1 5
Table2 6
Table2 7
Table2 8
Table2 9
Table2 10
我想要實現的是基本上清理掉這個表但是如果有意義的話,保留每個數據庫類型的最高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
TRY首先按db_type
選擇最大ID
組,然后將其用作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;
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,這些是要保留的值。 使用左連接,我選擇表中沒有in_ max_ids的所有行,這些是要刪除的行。 這只有在id是主鍵時才有效,否則我們也必須加入類型。
組合DB類型 - 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
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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.