簡體   English   中英

從表中刪除記錄,其中<字段的最大數字並保持最高編號

[英]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是唯一的嗎?

如果是這樣,你可以分兩個階段攻擊它:

  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 
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM