SQL查询优化:仅当ORDER与ITM和上一行相同时执行日期差计算
解决方案
你需要在LAG函数的OVER子句中添加PARTITION BY来按订单(ORDER)和物料(ITM)分组,这样日期差计算只会在相同分组内的行之间执行。修改后的代码如下:
SELECT TOP (50) CAST(A.DATE AS DATE) AS [Date], A.[ORDER] AS [Order], A.ITM AS [Item], ISNULL(A.DATE - LAG(A.DATE) OVER (PARTITION BY A.[ORDER], A.ITM ORDER BY A.DATE), NULL) AS 'Test' FROM Table1 AS A LEFT JOIN Table2 AS B ON A.[ORDER] = B.[ORDER] GROUP BY A.DATE, A.[ORDER], A.ITM, B.DATE ORDER BY A.DATE ASC
关键改动说明
- 添加
PARTITION BY A.[ORDER], A.ITM:将数据按订单和物料分组,LAG函数只会在同一分组内查找前一行数据,不同分组的行之间不会进行日期差计算。 - 对关键字
ORDER使用方括号[]包裹:避免因SQL关键字冲突导致语法错误。 - 保留
ORDER BY A.DATE:确保分组内的行按日期顺序排列,保证LAG取到的是同一分组内的上一条日期记录。
内容的提问来源于stack exchange,提问作者JeanPCQ
相关产品推荐
相关产品推荐

