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

为含GROUP BY的MAX查询设置上限,实现按公司分组取最新记录

解决方案:分组取最新记录并添加限制

首先,先帮你完善基础的「按company_id分组,筛选每个公司最大periods对应记录」的查询,再给你两种添加限制的方案:

1. 基础查询(无限制)

用INNER JOIN关联子查询的方式,先获取每个公司的最新periods,再匹配原表的完整记录:

SELECT sr.*
FROM salesreport sr
INNER JOIN (
    -- 子查询:按公司分组,拿到每个公司的最大periods
    SELECT company_id, MAX(periods) AS max_period
    FROM salesreport
    GROUP BY company_id
) AS latest 
ON sr.company_id = latest.company_id AND sr.periods = latest.max_period;

2. 添加限制的两种场景

场景1:限制返回的公司数量

如果你只想获取前N个公司的最新记录(比如前2个),可以在子查询中添加LIMIT,还可以配合ORDER BY按最新时间排序选取:

SELECT sr.*
FROM salesreport sr
INNER JOIN (
    SELECT company_id, MAX(periods) AS max_period
    FROM salesreport
    GROUP BY company_id
    ORDER BY max_period DESC  -- 按最新periods排序,优先取最近的公司
    LIMIT 2  -- 设置要限制的公司数量
) AS latest 
ON sr.company_id = latest.company_id AND sr.periods = latest.max_period;

如果不需要排序,直接去掉ORDER BY即可,会随机返回N个公司的记录。

场景2:限制每个公司的返回条数(或总记录数)

如果存在同一公司有多条记录的periods等于最大值的情况(比如某公司同一天有多条销售数据),或者你想限制总返回的记录数,用窗口函数会更灵活:

SELECT id, company_id, price, periods
FROM (
    SELECT 
        *,
        -- 按公司分组,按periods倒序给每条记录排名
        ROW_NUMBER() OVER (PARTITION BY company_id ORDER BY periods DESC) AS rn
    FROM salesreport
) AS ranked
WHERE rn = 1  -- 只保留每个公司排名第一的记录(即最新periods的那条)
LIMIT 3;  -- 可选:限制总返回的记录数量

这个方案的优势是:

  • 可以轻松控制每个公司返回的记录数(比如把rn <= 2改成返回每个公司前2条最新记录)
  • 外层的LIMIT可以直接限制最终返回的总条数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:21:04