2013-08-30 78 views
0

我有〜300.000記錄的表,其每對具有在一個特定的列中,例如相同的日期時間MySQL的刪除記錄相同的日期時間

id date     feat1 feat2 
--------------------------------------------------------------------------- 
1 10-12-2013 21:35:10 4.2 4.6 
2 10-12-2013 21:35:10 4.2 4.61 
3 10-12-2013 21:35:20 4.4 4.3 
4 10-12-2013 21:35:20 4.4 4.31 
5 10-12-2013 21:35:30 4.6 4.4 
6 10-12-2013 21:35:30 4.6 4.41 

顯然記錄具有相同的每對相同的日期值。所以我需要一個MySQL查詢,以消除重複,並在年底只有

1  10-12-2013 21:35:10 4.2  4.6 
3  10-12-2013 21:35:20 4.4  4.3 
5  10-12-2013 21:35:30 4.6  4.4 

什麼是MySQL查詢將比較記錄日期時間和消除重複?

+0

你可以刪除該指數http://stackoverflow.com /問題/ 18932 /如何-可以-I-除去重複的,行 – mabbas

+0

的記錄不是在所有的列中相同......但只有在日期字段,所以我需要在此基礎上特定的列 – thanili

+0

想必您的日期利用刪除準則日期數據類型? – Strawberry

回答

1

您可以刪除索引的重複日期

ALTER IGNORE TABLE table_name ADD UNIQUE INDEX(date); 

該查詢將刪除你的表和之後的重複值,如果你想

+0

事實上,我要保持在表中的唯一索引,因爲我不需要在日期時間重複。我不知道,加入了獨特的指數上特定的行刪除重複... – thanili

+0

它做它的罰款。 – Raspoutine

-2

使用在這樣的查詢HAVING子句: - 從表名具有dt_cnt dt_cnt> 1

SELECT COUNT(DATE_FIELD);

+0

http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows –

1

試試這個:

CREATE TEMPORARY TABLE app 
(id int) 

INSERT INTO app (id) 
SELECT t.id 
FROM myTable t 
WHERE EXISTS(
    SELECT 'PREVIOUS' 
    FROM myTable t2 
    WHERE t2.id < t.id 
    AND t2.date = t.date 
) 

DELETE FROM myTable 
WHERE id in (select id from app) 

我用了一個臨時表,因爲在MySQL你不能刪除一個表,其中在子查詢相同的表。我不喜歡使用DELETE和JOIN(在MySql中可以執行)。

如果你想優化你的查詢,請和ID組合索引,日期。

警告:我認爲只有日期字段和ID,我排除的特徵場(FEAT1和FEAT2)。如果你想在這些領域擴展先前的條件,分析它們與行不同。