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

如何在Microsoft SQL Server中获取每组的5个最近日期?

按Customer、Plant分组获取每组前5个最近日期的SQL查询方案

你当前的查询已经通过ROW_NUMBER()窗口函数完成了分组排序的核心逻辑,只需调整筛选条件就能实现需求:

修改后的完整SQL代码如下:

SELECT
    Customer,
    Plant,
    ForecastDate
FROM
    (
        SELECT
            *,
            ROW_NUMBER() OVER( PARTITION BY Customer, Plant ORDER BY ForecastDate DESC ) AS ROW_NUM 
        FROM
            table
    ) AS T
WHERE
    ROW_NUM <= 5

补充说明:

  • 原查询里的ROW_NUMBER()会给每个Customer+Plant分组内的记录,按ForecastDate降序分配唯一序号,筛选ROW_NUM <=5就能直接拿到每组最近的5条记录。
  • 如果你的数据中存在同一Customer+Plant组合下有重复ForecastDate的情况,且希望把这些重复日期的记录都纳入结果(比如某日期有3条记录,全部算在TOP5范围内),可以把ROW_NUMBER()替换为RANK()或DENSE_RANK():
    • RANK():相同日期的记录会获得相同序号,后续序号会跳过重复的数量(比如两条同日期记录序号都是1,下一条记录序号直接是3)
    • DENSE_RANK():相同日期的记录获得相同序号,后续序号不会跳过(比如两条同日期记录序号都是1,下一条记录序号是2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:15:28