MySQL 查询分组内最新的第一条数据

目录

[1、MySQL 5版本的写法](#1、MySQL 5版本的写法)

[2、MySQL 8版本的写法](#2、MySQL 8版本的写法)


由于MySQL 5不支持窗口函数,因此不能使用PARTITION()ROW_NUMBER()

🌰:获取每个班级中最新注册的学号人员信息

也就是从 user_info 学生表中获取每个 class_id 班级的最新一条记录

1、MySQL 5版本的写法

🔴写法1:

sql 复制代码
SELECT u.user_id, u.class_id, u.user_name, u.time
FROM (
    SELECT class_id, MAX(time) AS max_time
    FROM user_info
    GROUP BY class_id
) AS latest
JOIN user_info u ON u.class_id = latest.class_id AND u.time = latest.max_time;

释意:

1、子查询:

  • 子查询从 user_info 表中选择 class_id 和每个班级的最大 time 值。
  • 使用 GROUP BY class_id 对数据按班级分组。
  • 使用 MAX(time) 函数计算每个班级的最大时间值。

2、外层查询:

  • 外层查询使用 JOIN 操作连接子查询结果和 user_info 表。
  • JOIN 条件是 u.class_id = latest.class_id AND u.time = latest.max_time,这确保了对于每个班级,只有时间值等于该班级最大时间值的记录被选取出来

🔴写法2:

sql 复制代码
SELECT user.user_id, user.class_id, user.user_name, user.time 
FROM ( 
    SELECT user_id, class_id, user_name, time 
    FROM user_info 
    ORDER BY time DESC 
) AS user 
GROUP BY user.class_id;

释意:

1、子查询:

  • 子查询从 user_info 表中选择 user_id, user_name, 和 time 字段。
  • 子查询按照 time 字段降序排列,这意味着最近的时间将排在前面。

2、外层查询:

  • 外层查询从子查询的结果集中选择所有字段。
  • 使用 GROUP BY user.user_id 对结果集按 user_id 分组,这意味着每个 user_id 将只保留一条记录MySQL 5版本的写法:

2、MySQL 8版本的写法

sql 复制代码
SELECT user_id, class_id, user_name, time
FROM (
    SELECT user_id, class_id, user_name, time,
           ROW_NUMBER() OVER (PARTITION BY class_id ORDER BY time DESC) AS rn
    FROM user_info
) AS user
WHERE rn = 1;

释意:

1、子查询:使用窗口函数 ROW_NUMBER() 来对每个class_id分组,并按照time降序排列。

2.、外层查询:选择每个class_id中 rn 等于 1 的记录,这样可以获得每个班级最新的用户信息

相关推荐
hnlucky7 分钟前
redis 数据类型新手练习系列——Hash类型
数据库·redis·学习·哈希算法
LucianaiB1 小时前
【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
运维·数据库·人工智能·金仓数据库 2025 征文·数据库平替用金仓
时序数据说1 小时前
时序数据库IoTDB在航空航天领域的解决方案
大数据·数据库·时序数据库·iotdb
.生产的驴1 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
AnsenZhu2 小时前
2025年Redis分片存储性能优化指南
数据库·redis·性能优化·分片
Johny_Zhao2 小时前
MySQL 高可用集群搭建部署
linux·人工智能·mysql·信息安全·云计算·shell·yum源·系统运维·itsm
oydcm2 小时前
MySQL数据库概述
数据库·mysql
oioihoii2 小时前
C++23中if consteval / if not consteval (P1938R3) 详解
java·数据库·c++23
带娃的IT创业者2 小时前
《AI大模型趣味实战》基于RAG向量数据库的知识库AI问答助手设计与实现
数据库·人工智能
husterlichf3 小时前
MYSQL 常用数值函数 和 条件函数 详解
数据库·sql·mysql