如何修正SQL查询以获取每个客户的最近5个预测日期?
修正查询以获取每个客户的最近5个预测日期
原查询的核心问题是分区和排序逻辑错误:你按Plant, ForecastDate分区、按Customer排序,导致结果仅筛选出每个工厂+预测日期组合下的一条客户数据,完全不符合“获取每个客户最近5个预测日期”的需求。
以下是修正后的查询代码:
SELECT Customer, Plant, ForecastDate FROM ( SELECT Customer, Plant, ForecastDate, -- 按客户分区,按预测日期倒序生成行号 ROW_NUMBER() OVER( PARTITION BY Customer -- 若同一客户不同工厂需单独统计,改为 PARTITION BY Customer, Plant ORDER BY ForecastDate DESC ) AS ROW_NUM FROM 你的实际表名 -- 替换为你的数据表名称 ) AS T WHERE ROW_NUM <= 5 -- 保留每个客户最近的5个日期 ORDER BY Customer, ForecastDate DESC;
关键逻辑说明:
PARTITION BY Customer:确保为每个客户独立计算行号,互不干扰ORDER BY ForecastDate DESC:让最新的预测日期排在最前,行号标记为1WHERE ROW_NUM <=5:筛选出每个客户的前5条最新日期记录- 若业务需要按「客户+工厂」维度分别统计,只需修改分区条件为
PARTITION BY Customer, Plant
如果需要同时展示Quantity字段,直接在内外层的SELECT中添加该字段即可,核心逻辑保持不变。
内容的提问来源于stack exchange,提问作者zExcel
相关产品推荐
相关产品推荐

