2013-12-12 75 views
3

我搜索了但所有的問題都想出了刪除重複記錄並只保留一個最新的表,但我有點不同,我想刪除重複記錄同組,但只保留該組的最新記錄。這裏有一個例子:MYSQL刪除同一組中的重複記錄並只保留一個

ID Device_ID Time     Content Text 
1 abc   2013-11-30 15-30-01 I love you 
2 abc   2013-11-30 15-30-01 I love you 
3 def   2013-10-30 12-12-02 I love you 
4 def   2013-10-30 12-12-02 I love you 
5 ghj   2013-09-30 11-12-02 I love you 
6 ghj   2013-09-30 11-12-02 I love you 

所以存在具有與其他設備相同內容的一些設備,我想找到一種方法來刪除每一個設備ID重複的內容,並刪除重複,並保持最新。

如果我選擇按內容分組的文本,然後從那裏刪除它,那麼它會從其他設備刪除所有其他內容,我也做不到。

假設我有5000萬條記錄。那麼有沒有一種方法可以刪除每個設備ID上的重複記錄,其結果就像是我愛你每個設備ID上的內容文本。

我無法在惰性期間將我的列內容文本設置爲唯一,因爲可能存在使用相同內容文本的某個設備ID。或者,也許唯一的時間,但隨後每一個設備ID可以插入相同的時間,但差分內容的文字...

我想水庫

ID Device_ID TimeContent   Text 

2 abc   2013-11-30 15-30-01 I love you 

4 def   2013-10-30 12-12-02 I love you 

6 ghj   2013-09-30 11-12-02 I love you 
+0

不要放棄。這個問題必須已經回答了數千次 - 在SO和其他地方。 (雖然如果你真的無法弄清楚,那麼適當的DDL和/或一個sqlfiddle與預期的結果集可能會有用) – Strawberry

+0

你能解釋更多嗎? –

+0

這是一個與您的案例非常相似的答案:http://stackoverflow.com/questions/4075430/how-do-i-remove-duplicates-rows-in-my-mysql-database-keep-the-one-with -lowest整個技巧是在GROUP BY子句中列出適當的列,並使用MAX而不是MIN(用於最新記錄)。 – krokodilko

回答

3

試試這個:

DELETE FROM TableA 
WHERE id NOT IN (SELECT id 
       FROM(SELECT MAX(id) id FROM TableA t 
         GROUP BY t.Device_ID, t.Time, t.ContentText HAVING COUNT(*) > 1 
        ) AS A  
       ); 

檢查SQL FIDDLE DEMO

OUTPUT

| ID | DEVICE_ID |    TIME | CONTENTTEXT | 
|----|-----------|---------------------|-------------| 
| 2 |  abc | 2013-11-30 15-30-01 | I love you | 
| 4 |  def | 2013-10-30 12-12-02 | I love you | 
| 6 |  ghj | 2013-09-30 11-12-02 | I love you | 
| 13 |  ghj1 | 2013-09-30 11-12-02 | I love you | 
+0

這會刪除每個dups的單個dup行。 –

+0

我非常抱歉,您的查詢無法按預期工作,請參閱此測試用例:http://www.sqlfiddle.com/#!2/4c86f/1記錄10,11,12,13是相同的,但只有10個已被刪除。 – krokodilko

+0

對它沒有工作 –

4

嘗試:

DELETE FROM tblA 
WHERE id NOT IN (
      SELECT DISTINCT id FROM (
      SELECT MAX(id) as id FROM tblA 
      GROUP BY Device_ID, Time, ContentText 
      HAVING COUNT(*) > 1) A   
    ); 

Demo

+0

此查詢出現錯誤:'您無法在FROM子句中指定目標表'tbl'進行更新,請在此處粘貼您的查詢:http://www.sqlfiddle.com/# !2/7b705/1並點擊一個'Build'按鈕。 – krokodilko

+0

它沒有工作,在我的表中,唯一唯一的行是ID,主鍵是設備ID。所以如果用戶想看內容,它只顯示內容和時間的不同值,所以如果同一時間有相同的內容,它不會顯示重複,而只有1。所以每個用戶都附帶一個設備ID。因此,有百萬條記錄混合在一起,但一些device_id具有相同的記錄內容+時間,我想刪除它,但只能在device_id下使用,因此適用於表格的其餘部分... device_id abc和cdf與它沒有任何關係。 –

+0

@kordirko:檢查我的更新。 – Edper

0

NVM我發現這個問題只需切換次數*> 1比0,也不會刪除非重複

相關問題