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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:35:19