国产探花免费观看_亚洲丰满少妇自慰呻吟_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)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尤溪县| 湘潭市| 榆林市| 米脂县| 通榆县| 宁陵县| 奉化市| 磐石市| 牙克石市| 阳春市| 府谷县| 永胜县| 尼玛县| 治多县| 辽宁省| 阿瓦提县| 满洲里市| 大庆市| 彭水| 治多县| 洛宁县| 康保县| 林芝县| 宁城县| 巫山县| 枣强县| 郴州市| 北碚区| 泾源县| 尼木县| 武隆县| 尉氏县| 寿光市| 林州市| 兴城市| 易门县| 娱乐| 周口市| 华坪县| 隆德县| 体育|