You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何查询每位客户的最近最多3条订单记录

MySQL 查询语句实现方案

方案1:MySQL 8.0+ 版本(推荐,使用窗口函数)

利用ROW_NUMBER()窗口函数按客户分组打序号,过滤取最近3条后拼接即可,语句更简洁易读:

SELECT 
  Name,
  GROUP_CONCAT(Price ORDER BY Year DESC SEPARATOR ' ') AS order_prices
FROM (
  SELECT
    Name,
    Price,
    Year,
    -- 按客户分组,订单按年份从新到旧排序编序号
    ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Year DESC) AS row_num
  FROM Orders
) AS filtered_orders
WHERE row_num <= 3 -- 取最近最多3条
GROUP BY Name;

方案2:MySQL 5.x 兼容版本(无窗口函数支持)

通过关联子查询实现最近3条的过滤逻辑,兼容低版本MySQL:

SELECT 
  o1.Name,
  GROUP_CONCAT(o1.Price ORDER BY o1.Year DESC SEPARATOR ' ') AS order_prices
FROM Orders o1
WHERE (
  -- 统计同客户下年份大于等于当前订单的数量,<=3说明属于最近3条
  SELECT COUNT(*) FROM Orders o2 
  WHERE o2.Name = o1.Name AND o2.Year >= o1.Year
) <= 3
GROUP BY o1.Name;

两个方案执行后输出都和预期完全一致:

Nameorder_prices
Ram30 40 50
Shaam70 20

注:如果实际场景拼接内容过长,可提前执行SET group_concat_max_len = 10240;调整GROUP_CONCAT的长度上限,当前需求最多拼接3个值无需调整。

内容的提问来源于stack exchange,提问作者Simran Goyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:15:03