Как мне удалить записи в MySQL и сохранить последнюю дату - PullRequest
1 голос
/ 18 июля 2011

Пример table_1

ID Email         Answer   UpdateDate
1  xxx.@xx.com   1        2011-07-02
2  xxx.@xx.com   3        2011-07-11
3  vvv.@xx.com   3        2011-07-12
4  vvv.@xx.com   5        2011-07-13
5  xxx.@xx.com   5        2011-07-14
6  xxx.@xx.com   4        2011-07-14
7  xxx.@xx.com   4        2011-07-14
8  zzz.@xx.com   4        2011-07-15

Как удалить эти записи, но сохранить последние UpdateDate

И результат:

ID Email         Answer   UpdateDate
4  vvv.@xx.com   5        2011-07-13
7  xxx.@xx.com   4        2011-07-14
8  zzz.@xx.com   4        2011-07-15

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

Я бы проверил 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

EDIT

Еще один рефактор с той же логикой

0 голосов
/ 18 июля 2011

Вы можете использовать временную переменную для хранения самой высокой даты, а затем отдельный запрос для удаления всего, что <, чем это.Помните, что переменные зависят от соединения. </p>

select max(UpdateDate) from table_1 into @TempUpdateDate

delete from table_1 where UpdateDate < @TempUpdateDate
0 голосов
/ 18 июля 2011

Убедитесь, что UpdateDate является полем DATETIME.

Хотите ли вы сохранить самую последнюю 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...