加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:51:16 所属栏目:PHP教程 来源:网络整理
导读:我正面临关于 mysql表更新的问题.我有包含5列的表,包括ID,NAME,TIMESTAMP和其他2列.我的问题是我想删除那些ID和NAME与另一行,s ID和NAME匹配的行,并保留最新的TIMESTAMP行. 我正在尝试以下查询,但它显示错误: #1093 – You can’t specify target table ‘d
我正面临关于 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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读