北京SEO

mysql重复记录取最后一条记录方法

2019/10/10/17:35:33  阅读:1736  来源:谷歌SEO算法  标签: 搜索引擎

在应用中一个表中出现大量重复记录是常事,但有的时间我们希望过滤重复数据并取重复记录的一条记录,下面我来给大家介绍一个取重复记录其中一条的方法.

如下表,代码如下:

  1. CREATETABLE`t1`(
  2. `userid`INT(11)DEFAULTNULL,
  3. `atime`datetimeDEFAULTNULL,
  4. KEY`idx_userid`(`userid`)
  5. )ENGINE=InnoDBDEFAULTCHARSET=utf8;

数据如下,代码如下:

  1. MySQL>SELECT*FROMt1;
  2. +--------+---------------------+
  3. |userid|atime|
  4. +--------+---------------------+
  5. |1|2013-08-1211:05:25|
  6. |2|2013-08-1211:05:29|
  7. |3|2013-08-1211:05:32|
  8. |5|2013-08-1211:05:34|
  9. |1|2013-08-1211:05:40|
  10. |2|2013-08-1211:05:43|
  11. |3|2013-08-1211:05:48|
  12. |5|2013-08-1211:06:03|
  13. +--------+---------------------+
  14. 8ROWSINSET(0.00sec)

其中userid不唯一,要求取表中每个userid对应的时间离现在最近的一条记录,初看到一个这条件一般都会想到借用临时表及添加主建借助于join操作之类的.

给一个简方法,代码如下:

  1. MySQL>SELECTuserid,substring_index(group_concat(atimeORDERBYatimeDESC),",",1)ASatimeFROMt1GROUPBYuserid;
  2. +--------+---------------------+
  3. |userid|atime|
  4. +--------+---------------------+
  5. |1|2013-08-1211:05:40|
  6. |2|2013-08-1211:05:43|
  7. |3|2013-08-1211:05:48|
  8. |5|2013-08-1211:06:03|--phpfensi.com
  9. +--------+---------------------+
  10. 4ROWSINSET(0.03sec)

查询及删除重复记录,删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录,代码如下:

  1. deletefrompeople
  2. wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1)
  3. androwidnotin(selectmin(rowid)frompeoplegroupbypeopleIdhavingcount(peopleId)>1)

查找表中多余的重复记录(多个字段),代码如下:

  1. select*fromvitaea
  2. where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)

删除表中多余的重复记录(多个字段),只留有rowid最小的记录,代码如下:

  1. deletefromvitaea
  2. where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)
  3. androwidnotin(selectmin(rowid)fromvitaegroupbypeopleId,seqhavingcount(*)>1)

查找表中多余的重复记录(多个字段),不包含rowid最小的记录,代码如下:

  1. select*fromvitaea
  2. where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)
  3. androwidnotin(selectmin(rowid)fromvitaegroupbypeopleId,seqhavingcount(*)>1)

广告内容

mysql重复记录取最后一条记录方法 mysql重复记录取最后一条记录方法 mysql重复记录取最后一条记录方法

相关阅读

热门评论

小明SEO博客 小明SEO博客

小明SEO博客,新时代SEO博客

总篇数171

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法