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

article/2025/9/18 20:12:36

需求: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

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


http://chatgpt.dhexx.cn/article/cym9AyLs.shtml

相关文章

MySQL去重查询

在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录, 实例: select distinct name,id from user;,这样的结果为: distinct name,id 这样的my…

mysql去重查询的三种方法

文章目录 前言一、插入测试数据二、剔除重复数据方法1.方法一:使用distinct2.方法二:使用group by3.方法三:使用开窗函数 总结 前言 数据库生成环境中经常会遇到表中有重复的数据,或者进行关联过程中产生重复数据,下面…

易基因|RNA m7G甲基化测序(m7G-MeRIP-seq)

N7-甲基鸟苷(N7-methylguanosine,m7G)是真核生物tRNA、rRNA和mRNA 5cap中最丰富的修饰之一。作为一种重要的表观遗传修饰,m7G RNA甲基化在基因表达、加工代谢、蛋白质合成、转录稳定等方面发挥着重要的作用,参与疾病发…

GeneXus学习(二)基本对象(持续更新)

GeneXus对象很多,笔者持续更新每个对象的用法 一、Transaction GeneXus中的Transaction是用于描述对象的模型。 英文描述: Describes an object or actor of reality, defining the structure of the database, business rules, and the UI for data…

sgRNAs基因编辑

CRISPR-Cas9知识学习笔记 https://www.163.com/dy/article/FGCP58KC0532AN5N.html https://crispr.dbcls.jp CRISPR(clustered regularly interspaced short palindromic repeats,成簇的规律间隔短回文重复序列)和CRISPR-associated protein …

敏捷开发与GeneXus哲学

译者前言 在GeneXus的重要创始人和核心成员的观念里,在做一件重大事情前往往需要进行大量的思考,尤其是所要从事事业背后的本质及相关的哲学问题进行思考,然后要研究对应的方法论。在上述问题得到明确的答案后,才开始开展工作。 …

【Reactome 下载所有通路基因集】

Reactome 下载所有通路基因集 Reactome 下载所有通路基因集Reactome 介绍ReactomePA官网下载处理 Reactome 下载所有通路基因集 目前,网上有许多下载 KEGG、GO 数据库中所有富集通路的基因集方法,但是相对于 Reactome 来说却几乎没有。所以,…

易基因|一种全新的检测DNA羟甲基化的技术:ACE-Seq

大家好,这里是专注表观组学十余年,领跑做组学科研服务的易基因。今天给大家介绍一种全新的检测DNA羟甲基化的技术:APOBEC-coupled epigenetic sequencing,简称【ACE-seq】。 前言 DNA序列中胞嘧啶(C)5’ 碳…

已知基因名,如何在genbank中查询基因序列?

以人类YBX1为例,首先进入NIH官网,如下图,database选择gene,在输入框中输入自己需要找的基因名,点击搜索。 搜索后在下方search result中会显示很多结果,分别是不同物种的。点击人类的YBX1进入详情页面。 进…

基因组学(Geonomics)

什么是基因组学? 基因组学(Geonomics)是一门研究基因组(Genome)的科学。 什么是基因组? 我们每个人都是由上万亿个细胞构成的,每个细胞中都包含一套完整的生命密码,也就是DNA,而基因组就是指一个细胞中包含的所有的DNA。我们的…

系统安全: GeneXus 新身份验证方案

GAM 是 GeneXus 访问管理器,用于在您的应用程序中实现身份验证和授权,此功能为GeneXus内置功能。 介绍前我们先了解安全和身份验证领域正在发生的事情。 Auth0关于市场上可用的身份验证方案的调查显示: 28% 提供多因素身份验证,这…

Jetson Xavier NX

Jetson Xavier NX 提示:记录学习过程,倘若有抄袭请原谅 文章目录 Jetson Xavier NX前言一、安装系统二、烧镜像三、启动系统打开风扇先 四、配置VNC(此处借鉴)五、安装中文输入法六、安装cuda七、安装pytorch跟torchvision八、试试…

GeneXus学习记录——创建KB(KnowledgeBase/知识库)

GeneXus安装好之后,怎么创建一个知识库呢? 只需要点文件-新建-知识库,就可以了。 弹出的窗口填写KB名字,选择保存目录,点创建。 这里有一个注意点:数据库排序规则。 点开高级,可以看到这里SQL…

GeneXus试用报告

GeneXus试用报告 (上) GeneXus 自称为业界第一款智能开发工具,由乌拉圭的ARTech公司出品,通过描述应用软件的知识库,可以自动生成数据库模型,自动生成.net或Java两大平台的代码。 最近试用了GeneXus,并计划用GeneXus来…

GeneXus学习记录——Transaction

GeneXus中的Transaction是用于描述对象的模型。 英文描述: Describes an object or actor of reality, defining the structure of the database, business rules, and the UI for data manipulation. 翻译了一下: 描述真实的对象或参与者,定…

GeneXus学习记录

最近在网上看到了一个开发工具,叫GeneXus,很有特色的一个平台,在这里记录一下学习过程。 这个是中文官网GeneXus,这个是Global官网GeneXus。 看了一下介绍,很有特点,贴两张图感受一下 利用算法自动分析…

GeneXus学习(一)安装与介绍

转:https://blog.csdn.net/csdn_1573/article/details/120081202GeneXus安装 开始学习GeneXus,第一步就是环境的搭建。 说明文档 查看官网上学习中心,下方有一个安装及申请授权的说明文档。 按照文档中的步骤来做,除了GeneXus软件…

关于 GeneXus 起源的几点思考

译者序 不论是初次接触GeneXus,还是使用GeneXus很长时间,我们大家常常有一些疑问:在由欧美国家占绝对主导地位的软件领域,一个来自南美的小国-乌拉圭,竟然出了一个世界知名的软件公司?30多年几乎跨越软件发…

GeneXus的科技基础(GeneXus背后的理论)

GeneXus 是一个用于开发和维护软件系统的工具。 GeneXus 基于业务系统知识的自动管理。这怎么可能?通过在数学和逻辑方面定义系统开发和维护问题,以确保严格处理所考虑的问题。 GeneXus的目标是获得一个充分代表现实并且可以随着时间保持最新的模型。如何…

GeneXus学习记录——环境搭建

开始学习GeneXus,第一步就是环境的搭建。 说明文档 查看官网上学习中心,下方有一个安装及申请授权的说明文档。 按照文档中的步骤来做,除了GeneXus软件本身,在此之前还有一些相关环境的安装和配置指示了参考链接,这里…