需求:MySQL去重查询只保留一条最新的记录

文章目录

  • 易错的写法
  • 正确的写法-1
  • 正确的写法-2
  • 正确的写法-3

易错的写法

表结构与初始数据如下SQL文件:

-- MySQL dump 10.13  Distrib 8.0.28, for Linux (x86_64)
--
-- Host: localhost    Database: test01
-- ------------------------------------------------------
-- Server version   8.0.28-0ubuntu0.20.04.3/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `MyClass`
--DROP TABLE IF EXISTS `MyClass`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `MyClass` (`id` int NOT NULL AUTO_INCREMENT,`name` char(20) NOT NULL,`sex` int NOT NULL DEFAULT '0',`degree` double(16,2) DEFAULT NULL,`inserttime` text,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `MyClass`
--LOCK TABLES `MyClass` WRITE;
/*!40000 ALTER TABLE `MyClass` DISABLE KEYS */;
INSERT INTO `MyClass` VALUES (1,'Tom',0,96.45,'2022-02-19 18:00:00'),(2,'Joan',0,82.99,'2022-02-19 18:20:00'),(3,'Wang',0,96.59,'2022-02-19 18:30:00'),(4,'Tom',0,96.45,'2022-02-19 17:00:00'),(5,'Joan',0,82.99,'2022-02-19 18:25:00'),(6,'Wang',0,96.59,'2022-02-19 18:35:00');
/*!40000 ALTER TABLE `MyClass` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2022-02-20  4:35:15

SQL统计语句:


#全表扫描查询
SELECT * FROM test01.MyClass;
#根据'name'分组统计查询最新一条数据
SELECT * FROM test01.MyClass
WHERE name in (SELECT name FROM test01.MyClass GROUP BY name)AND inserttime in (SELECT max(inserttime) FROM test01.MyClass GROUP BY name);

全表扫描查询_结果:

根据’name’字段去重统计查询最新数据_结果:


正确的写法-1

--------------------------------------------错误纠正UPDATE Sun May 1 00:28:18 CST 2022

初始数据如下:

[{"id":1, "name":"Tom", "sex":0, "degree":96.45, "inserttime":"2022-02-19 18:00:00"},{"id":2, "name":"Joan", "sex":0, "degree":82.99, "inserttime":"2022-02-19 18:20:00"},{"id":3, "name":"Wang", "sex":0, "degree":96.59, "inserttime":"2022-02-19 18:00:00"},{"id":4, "name":"Tom", "sex":0, "degree":96.45, "inserttime":"2022-02-19 17:00:00"},{"id":5, "name":"Joan", "sex":0, "degree":82.99, "inserttime":"2022-02-19 18:00:00"},{"id":6, "name":"Wang", "sex":0, "degree":96.59, "inserttime":"2022-02-19 18:35:00"},{"id":7, "name":"Wang", "sex":0, "degree":90.0, "inserttime":"2022-02-19 18:36:00"}]
#全表扫描查询
SELECT *
FROMtest01.MyClass
ORDER BY inserttime DESC;#根据'name'字段去重统计查询最新数据(错误的写法)
#SELECT * FROM test01.MyClass
#WHERE
#   name in (SELECT name FROM test01.MyClass GROUP BY name)
#   AND inserttime in (SELECT max(inserttime) FROM test01.MyClass GROUP BY name);#去重查询只保留一条最新的记录(正确的写法-1)
SELECT classtab.*
FROM(SELECT name, MAX(inserttime) inserttimeFROMtest01.MyClassGROUP BY name) tmpLEFT JOINtest01.MyClass classtab ON classtab.name = tmp.nameAND classtab.inserttime = tmp.inserttime;

#全表扫描查询_结果:

#去重查询只保留一条最新的记录(正确的写法-1)_结果:

正确的写法-2

正确的写法-3

文末:若有错误请批评指正.

MySQL去重查询只保留一条最新的记录相关推荐

  1. mysql去重查询只留一条最新的

    mysql查询到时候如何去重(指定两个条件一样的数据) 可以使用groupby以dname分组 select*fromtablegroupbydname 这样不行,,因为我还有dname一样,,但是s ...

  2. mysql分组查询只获取第一条

    mysql分组查询只获取第一条 接到一个需求: 需要获取协议表里所有供应商对应最新的采购员. 由于协议表里供应商的协议会有多个,可能采购员也不是同一个,所以需要做到聚合.筛选才能达到效果. -- 外层 ...

  3. mysql 重复数据只保留一条

    解析: 将去重的数据和未去重的数据联查,去重掉的那部分肯定查不到,找到对应的id,删除即可 本SQL 不适用数据量太大的表 DELETE FROM hot_propertys WHERE id in ...

  4. mysql sql 语句 查询重复数据 并删除重复数据 只保留一条

    **#例1:根据手机号customer_id查询所有重复的数据** SELECT* FROMaad_apply_main WHEREcustomer_id IN (SELECTcustomer_idF ...

  5. MySQL 中删除重复数据只保留一条

    WechatIMG256.jpeg 场景 在许多条记录里,存在着些相同的记录,使用SQL语句,删除掉重复项只保留一条. 数据模型 half_demon 半妖表 id name weapon skill ...

  6. MySql删除重复数据(只保留一条)

    MySql删除重复数据 1. 问题引入 前一段遇到MySql数据重复的问题.由于重复向同一张表导入同一批数据,导致前台展示的数据重复,唯一方便快捷的方法莫过于利用delete操作删除重复数据(已经封板 ...

  7. mysql删除重复记录并且只保留一条

    准备的测试表结构及数据 插入的数据中A,B,E存在重复数据,C没有重复记录 CREATE TABLE `tab` (   `id` int(11) NOT NULL AUTO_INCREMENT,   ...

  8. mysql删除重复数据只保留一条_mysql查找删除重复数据并只保留一条实例详解

    有这样一张表,表数据及结果如下: school_id school_name total_student test_takers 1239 Abraham Lincoln High School 55 ...

  9. php mysql只获取一条数据_php mysql 查询只返回第一条数据

    php mysql 查询只返回第一条数据 $search = mysql_query("select * from `info`"); $search = mysql_fetch_ ...

最新文章

  1. 创业基础(第四章: 创业风险及识别与管理) 来自高校:全国大学生创新创业实践联盟 分类:创新创业 学习规则:按序学习
  2. Ubuntu16.04 安装ftp
  3. Java浮点值拒绝服务漏洞危害分析
  4. maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
  5. IT工程师必备的认证
  6. GraphQL及元数据驱动架构在后端BFF中的实践
  7. iOS URL Schemes与漏洞的碰撞组合
  8. mysql 定时任务 日志_mysql定时备份任务
  9. 吉比特校招笔试题 字母数字混合排序
  10. 基于python的安全即时通讯系统
  11. 云环境下搭建FTP服务器(不使用21端口)
  12. CAS单点登录-密码管理(十三)
  13. SSDAlloc:用 SSD 扩展内存
  14. 计算机导论11.29课后总结
  15. 【直播回顾】Hello HarmonyOS系列应用篇完美收官!
  16. 第一次使用虚拟机(VMware)
  17. 手机酷派4G5316 5313s 黑砖 求转成功 9008端口 9006端口 少走弯路选对镜像...
  18. Git在windows下的安装和使用GIT@OSC
  19. 用python写一个函数_Python基础-函数篇
  20. AOP 主要应用场景

热门文章

  1. android 历史记录浏览器,Android如何在所有浏览器应用中获取浏览器历史记录?
  2. Dell 电脑蓝屏0xc0000001解决办法
  3. ECMAScript6详解
  4. 洛谷P1509 找啊找啊找G——教你如何花尽量少的时间泡更多的妹子
  5. 模拟银行动态口令生成
  6. tesseract-4.0.0源码编译安装
  7. shell中grep的用法
  8. curl 显示响应状态码
  9. 小度助手和它背后的百度AI野望
  10. 下载Android源代码