国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql重復記錄取最后一條記錄方法

2024-07-24 12:37:49
字體:
來源:轉載
供稿:網友

在應用中一個表中出現大量重復記錄是常事,但有的時間我們希望過濾重復數據并取重復記錄的一條記錄,下面我來給大家介紹一個取重復記錄其中一條的方法.

如下表,代碼如下:

  1. CREATE TABLE `t1` ( 
  2. `userid` INT(11) DEFAULT NULL
  3. `atime` datetime DEFAULT NULL
  4. KEY `idx_userid` (`userid`) 
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

數據如下,代碼如下:

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

其中userid不唯一,要求取表中每個userid對應的時間離現在最近的一條記錄,初看到一個這條件一般都會想到借用臨時表及添加主建借助于join操作之類的.

給一個簡方法,代碼如下:

  1. MySQL> SELECT userid,substring_index(group_concat(atime ORDER BY atime DESC),",",1) AS atime FROM t1 GROUP BY userid; 
  2. +--------+---------------------+ 
  3. | userid | atime | 
  4. +--------+---------------------+ 
  5. | 1 | 2013-08-12 11:05:40 | 
  6. | 2 | 2013-08-12 11:05:43 | 
  7. | 3 | 2013-08-12 11:05:48 | 
  8. | 5 | 2013-08-12 11:06:03 |  --Vevb.com 
  9. +--------+---------------------+ 
  10. ROWS IN SET (0.03 sec) 

查詢及刪除重復記錄,刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄,代碼如下:

  1. delete from people  
  2. where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1) 
  3. and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1) 

查找表中多余的重復記錄(多個字段),代碼如下:

  1. select * from vitae a 
  2. where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1) 

刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄,代碼如下:

  1. delete from vitae a 
  2. where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
  3. and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 

查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄,代碼如下:

  1. select * from vitae a 
  2. where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 
  3. and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华池县| 大宁县| 平湖市| 木兰县| 镇赉县| 枞阳县| 安图县| 东平县| 扎囊县| 呼图壁县| 佳木斯市| 安宁市| 晋江市| 深州市| 德钦县| 天等县| 永康市| 卢湾区| 景谷| 重庆市| 綦江县| 乌拉特中旗| 云安县| 和平县| 内乡县| 长汀县| 张家港市| 嫩江县| 宜都市| 腾冲县| 永清县| 北流市| 德江县| 长沙市| 社旗县| 土默特右旗| 亚东县| 乌兰县| 英吉沙县| 江陵县| 定南县|