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

如何在SQL Server中获取每个客户的最近5个预测日期?

解决SQL查询获取每个客户最近5个预测日期的问题

原查询的问题

你当前的查询逻辑完全不符合需求:

  • 窗口函数的PARTITION BY Plant, ForecastDate是按工厂+预测日期分组,这和“按客户分组取最近日期”的目标无关
  • ORDER BY Customer DESC是按客户名称排序,不是按日期的新旧排序
  • 最后过滤ROW_NUM = 1只会取每个工厂+日期组里的第一个客户,完全达不到获取每个客户最近5个日期的效果

正确的查询写法

要实现每个客户(结合工厂,若客户和工厂关联)的最近5个预测日期,且保留同一日期的所有行,需要用DENSE_RANK()按客户分组、按日期倒序排名,再筛选排名前5的日期对应的所有数据:

SELECT 
    Customer, Plant, ForecastDate, Quantity  -- 按需保留需要的字段
FROM 
    (SELECT 
         *,
         -- 按客户+工厂分区,预测日期从新到旧排名,同一日期的行排名相同
         DENSE_RANK() OVER (PARTITION BY Customer, Plant ORDER BY ForecastDate DESC) AS DateRank
     FROM 
         YourTableName  -- 替换成你的实际表名
     ) AS T
WHERE 
    DateRank <= 5;

逻辑说明

  • PARTITION BY Customer, Plant:确保是按每个客户+工厂的组合来统计最近日期(如果你的业务中客户和工厂是一一对应或需要按工厂区分客户,保留Plant;若不需要,只写Customer即可)
  • ORDER BY ForecastDate DESC:让最新的预测日期排名为1,依次往后
  • DENSE_RANK():同一预测日期的所有行会得到相同的排名,这样筛选DateRank <=5时,某个客户的第5个最近日期的所有行都会被保留,符合你“保留同一日期多行数据用于对比”的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:40:29