MySql 怎么查出符合条件的最新的数据行?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySql 怎么查出符合条件的最新的数据行?

平时做业务,经常是需要查什么什么什么的最新的一条数据。


那至于最新这个概念, 对于产品来说,经常会说的是 时间顺序,最新也就是 最近的意思。


结合示例:



这是一张记录人员来访的记录表。


数据表里的数据准确记录了每个人来访时带的帽子颜色、时间、人员编码(每个人唯一)。


image.png


数据样例:



image.png


需要做到的是 :



拿出符合条件的最新的来访记录。


你会最怎么做?


先实现一点的, 取出 A101 这个人员编码的 最新来访记录 。


首先先展示错误的sql示例: 想当然地使用max() 函数。


SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record WHERE user_code='A101' ;


查询结果(错误的结果):


image.png


显然咋一看出来的数据有模有样,但是其实是错的。


为什么是错的的,可以稍微讲一下,既然评论区有人感兴趣了(欢迎兄弟们说出自己的看法)。


简单叙述, max是聚合函数, 我们的错误示例没配合group by 去使用, 这时候其实也就mysql这个家伙能让我们执行了,很多数据库都直接报错的。


那么执行是执行的,其实这时候mysql相当于把整个表当作了一个内容块去进行一个压缩检索。


我们加上了where 条件  user_code='A101',所以整个内容块确实过滤掉了其他不是user_code='A101' 的数据。


也就是说这种松懈执行的情况下,mysql保证max 返回(相关列) 的最大值, 其他列字段它是不保证的。


正确的数据是 :

image.png


那是不是max(id) 用不了了?


正确用法(将符合条件的最大id值作为条件):


SELECT

id,user_code,cap_color,create_time

FROM vist_record

WHERE id IN (SELECT MAX(id) AS id FROM vist_record WHERE user_code='A101' )


查询结果:


image.png


但是看到上面使用子查询的这种方式,

大家心里面肯定也已经在暗暗地骂娘, 拿个最新数据这么麻烦?

有没有简单一点的?

有。


比如说,我们已经确定了, id是自增的,id最大的数据(符合条件的数据) 就是最新的。


那么我们就可以使用倒序 DESC 来取最新数据:


DESC 也就是 倒序/降序 。


PS:


image.png


使用倒序查找:


SELECT *

FROM vist_record

WHERE user_code='A101'

ORDER BY id DESC

LIMIT 1;


查询结果:


 image.png


或者根据时间倒序:


SELECT *

FROM vist_record

WHERE user_code='A101'

ORDER BY create_time DESC

LIMIT 1;


查询结果:


image.png


就这么简单实现了吗?


那么我们如果需求要的不是指定A101 要的是涉及到的每一个人的最新数据呢?

也就是存在多组的概念。


每一类的符合条件的最新数据



橙色框就是 A101 、B202 、 C303 分别的最新记录 , 我们要取出来。

image.png


错误示例:


 SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record   GROUP BY user_code


错误的筛选结果:


image.png


正确编码:


SELECT  id ,user_code,cap_color,create_time FROM vist_record  WHERE id in

(

SELECT MAX(id) AS id  FROM vist_record  GROUP BY user_code

)

image.png


好了,该篇就先到这吧。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
54 1
|
3月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
449 0
|
3月前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
66 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
3月前
|
关系型数据库 MySQL 数据库
mysql 里创建表并插入数据
【10月更文挑战第5天】
196 1
|
3月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
60 3
|
25天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
90 6
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
163 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
1月前
|
SQL 关系型数据库 MySQL
mysql分页读取数据重复问题
在服务端开发中,与MySQL数据库进行数据交互时,常因数据量大、网络延迟等因素需分页读取数据。文章介绍了使用`limit`和`offset`参数实现分页的方法,并针对分页过程中可能出现的数据重复问题进行了详细分析,提出了利用时间戳或确保排序规则绝对性等解决方案。
|
2月前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
2月前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
75 14
下一篇
开通oss服务