Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql分组后获取每组最新一条数据

作者:冫LOVE灬丶棒棒   发布日期:2026-03-17   浏览:99

-- 假设我们有一个名为 `orders` 的表,包含以下字段:
-- id: 订单ID (主键)
-- customer_id: 客户ID
-- order_date: 订单日期
-- amount: 订单金额

-- 目标:按客户分组,获取每个客户的最新一条订单记录

-- 方法1:使用窗口函数 ROW_NUMBER()
SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
    FROM orders
) t
WHERE rn = 1;

-- 解释:
-- 1. 使用窗口函数 ROW_NUMBER() 按 customer_id 分组,并按 order_date 降序排列。
-- 2. 对每个分组的第一条记录(即最新的订单)赋予 rn = 1。
-- 3. 最后通过 WHERE rn = 1 筛选出每组最新的订单。

-- 方法2:使用子查询和 JOIN
SELECT o1.*
FROM orders o1
JOIN (
    SELECT customer_id, MAX(order_date) AS max_order_date
    FROM orders
    GROUP BY customer_id
) o2 ON o1.customer_id = o2.customer_id AND o1.order_date = o2.max_order_date;

-- 解释:
-- 1. 子查询获取每个客户最新的订单日期。
-- 2. 主查询通过 JOIN 将子查询结果与原表关联,获取完整的订单信息。

上一篇:mysql删除重复项只保留一条

下一篇:mysql 行锁

大家都在看

mysqlavg函数保留小数

mysql显示表内容

mysql经纬度距离计算

mysql 加密

存储过程mysql

mysql 1265

mysql with语句

mysql时间加减

mysql查询表名,模糊匹配

brew 启动mysql

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站