微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – MySql查询通过保留最新的时间戳值来删除重复的行?

我正面临关于mysql表更新的问题.我有包含5列的表,包括ID,NAME,TIMESTAMP和其他2列.我的问题是我想删除那些ID和NAME与另一行,s ID和NAME匹配的行,并保留最新的TIMESTAMP行.

我正在尝试以下查询,但它显示错误

#1093 – You can’t specify target table ‘dummy1’ for update in FROM clause

查询是:

delete from dummy1  where LAST_USED_DATE not in(
select max(LAST_USED_DATE) from dummy1
group by ID,NAME);

解决方法:

尝试

DELETE d
  FROM dummy1 d JOIN 
(
  SELECT d1.id, d1.name, MAX(d1.last_used_date) max_date
    FROM dummy1 d1 JOIN dummy1 d2
      ON d1.id = d2.id AND d1.name = d2.name
   GROUP BY id, name
) q ON d.id = q.id AND d.name = q.name AND d.last_used_date <> q.max_date

这是SQLFiddle演示

更新要仅检查重复的ID,您可以稍微调整上述查询

DELETE d
  FROM dummy1 d JOIN 
(
  SELECT d1.id, MAX(d1.last_used_date) max_date
    FROM dummy1 d1 JOIN dummy1 d2
      ON d1.id = d2.id
   GROUP BY id
) q ON d.id = q.id AND d.last_used_date <> q.max_date

这是SQLFiddle演示

UPDATE2删除具有最大时间戳的dupes

1)您可以通过引入具有IGnorE选项的唯一索引.在那种情况下,MysqL将决定自己保留哪些记录.

ALTER TABLE dummy1 ENGINE MyISAM;
ALTER IGnorE TABLE dummy1 ADD UNIQUE (id, name);
ALTER TABLE dummy1 ENGINE InnoDB;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐