2011-07-18 98 views
1

table_1如何刪除在MySQL記錄並保持最新的日期

ID Email   Answer UpdateDate 
1 [email protected] 1  2011-07-02 
2 [email protected] 3  2011-07-11 
3 [email protected] 3  2011-07-12 
4 [email protected] 5  2011-07-13 
5 [email protected] 5  2011-07-14 
6 [email protected] 4  2011-07-14 
7 [email protected] 4  2011-07-14 
8 [email protected] 4  2011-07-15 

如何刪除這個記錄,但保留最新UpdateDate

而結果:

ID Email   Answer UpdateDate 
4 [email protected] 5  2011-07-13 
7 [email protected] 4  2011-07-14 
8 [email protected] 4  2011-07-15 
+0

那麼,這個結果將不會是正確的,只要身份證去; ID不打算改變。結果中的ID應該是「5」和「4」。 –

+0

Delan Azabani感謝您的ID。編輯 – hmmmm

+0

您可以更具體地瞭解您想要保留的內容嗎?它只是最近的日期嗎?每個電子郵件地址的最新信息?每個Answer值的最近值?或者是其他東西? –

回答

-1

你可以使用一個臨時變量來存儲最高日期,然後一個單獨的查詢,刪除一切是<比。請記住,變量是特定於連接的。

select max(UpdateDate) from table_1 into @TempUpdateDate 

delete from table_1 where UpdateDate < @TempUpdateDate 
+0

謝謝史蒂夫..這一個工作,但一些數據將刪除,不保留最新的日期。 – hmmmm

+0

這仍然具有與其他答案相同的邏輯錯誤。每個電子郵件地址需要保留* that *電子郵件地址的最新記錄。由於每個電子郵件地址的最後一個電子郵件地址的日期不同,因此您無法使用臨時變量。 – MatBailie

2

我會檢查UpdateDate與相關的子查詢。

CREATE TEMPORARY TABLE 
    latestRecord (
    Email  VARCHAR(128), 
    updateDate DATETIME 
) 
INSERT INTO 
    latestRecord 
SELECT 
    Email, 
    MAX(updateDate) AS updateDate 
FROM 
    table_1 
GROUP BY 
    Emal 

DELETE 
    table_1 
FROM 
    table_1 
INNER JOIN 
    latestRecord 
    ON latestRecord.Email  = table_1.Email 
    AND latestRecord.updateDate < table_1.updateDate 

編輯

相同的邏輯的另一個重構

+0

我得到了1064 - 你的SQL語法有錯誤。 – hmmmm

+0

錯過了第一行的「FROM」。 –

+0

您無法在FROM子句 – hmmmm

-1

確保UpdateDate是DATETIME場。

是否要保留每個Answer值的最新UpdateDate?這將做到這一點:

delete from table_1 where UpdateDate not in (select max(UpdateDate) from table_1 group by Answer); 

,如果你只是想保持最新的日期,那麼:

delete from table_1 where UpdateDate not in (select max(UpdateDate) from table_1); 
+0

謝謝史蒂夫。我得到了1093 - 您無法在FROM子句中指定目標表'table_1'進行更新 – hmmmm

+0

他希望每個用戶的最新答案(電子郵件地址)。 'NOT IN'的用法在這裏不起作用,因爲每個用戶只會保留一個日期,並且用戶之間可能會有所不同。 (我會看看這個語法問題。) – MatBailie

相關問題