2011-07-18 60 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

相关问题