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

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

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


易错的写法

表结构与初始数据如下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); 

正确的写法-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 * FROM test01.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) inserttime FROM test01.MyClass GROUP BY name) tmp LEFT JOIN test01.MyClass classtab ON classtab.name = tmp.name AND classtab.inserttime = tmp.inserttime; 

正确的写法-2

正确的写法-3

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213640.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:55
下一篇 2026年3月18日 下午5:55


相关推荐

  • JAVA(计算机编程语言)

    JAVA(计算机编程语言)走进JAVA//公共的类类名:要求与文件保持一致,每一个单词首字母大写publicclassHelloWorld{//类的开始 //公共的静态的没有返回值类型的主方法()->参数列表 publicstaticvoidmain(String[]args){//方法的开始 //系统输出打印()->内容””中的内容原封不动显示->字符串 System.out.println(“HelloWorld!!!”);//;结束语句

    2022年7月8日
    29
  • 真封神虚拟服务器,服务器端文件详细介绍即修改(三)

    真封神虚拟服务器,服务器端文件详细介绍即修改(三)我们每星期加三个修改教程,废话不多说开始吧。1.打开服务器端,修改等级在version\chinese_gb\config的game_rule.ini可以设置最高等级和宝宝最高等级包括传送最高多钱。PK设置等等。这个相信大家一看就明白了。2.language这个文件夹属于指令的唯一能用的是W端可以读公告系统也就是点卡系统用公告修改器修改下能发公告这里就不多说了工具都是做好…

    2022年7月24日
    14
  • java ORA-01008: 并非所有变量都已绑定避坑

    java ORA-01008: 并非所有变量都已绑定避坑//数据库增加数据的函数 publicbooleanadd(Creditc){ Stringsql=”insertintocredit(id,name,pwd,Money)” +”values(?,?,?,?)”; //要插入的对象中的数据拿到object数组中 Objecto[]={c.getId(),c.getName(),c.getPwd()…

    2025年9月25日
    6
  • 补间动画缓动_ppt补间动画在哪里

    补间动画缓动_ppt补间动画在哪里ScaleAnimation是尺寸变化动画的类,控制View的尺寸变化。ScaleAnimation类官方文档:https://developer.android.com/reference/android/view/animation/ScaleAnimation.html关于父类Animation的详解可参考文章:http://blog.csdn.net/ruancod

    2022年10月15日
    5
  • nginx解决前端跨域问题_ajax跨域请求cors

    nginx解决前端跨域问题_ajax跨域请求cors通过Nginx模块HttpHeadersModule来添加Access-Control-Allow-Origin允许的地址。在Nginx的conf目录下修改nginx.conf,添加以下代码location~*\.(eot|ttf|woff|svg|otf)${add_headerAccess-Control-Allow-Origin*;}//eot|tt

    2022年8月24日
    8
  • Redis的数据类型以及各类型的操作

    Redis的数据类型以及各类型的操作

    2022年4月3日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号