如何在SQL Server中获取对应SKU的上一笔金额数据?
解决SQL Server中按SKU分组获取上一笔金额的问题
你遇到的问题是因为LAG函数缺少了按SKU分组的逻辑,默认会在整个结果集里取上一行数据,而非当前SKU组内的上一条记录。
正确实现代码
使用PARTITION BY SKU将数据按SKU拆分独立分组,再在组内按日期(可结合Fol确保排序唯一)排序,最后用COALESCE将无历史数据的NULL替换为指定分隔符:
SELECT Date, Fol, SKU, Amount, COALESCE(LAG(Amount) OVER (PARTITION BY SKU ORDER BY Date, Fol), '-') AS Previous_Amount FROM YourTableName;
关键参数说明
PARTITION BY SKU:把相同SKU的记录归为一组,LAG函数仅在组内计算上一条数据ORDER BY Date, Fol:在SKU组内按日期排序,若存在同一日期多条记录,追加Fol字段保证排序的唯一性,避免结果混乱COALESCE(..., '-'):当组内是第一条记录(无历史数据)时,将返回的NULL替换为你需要的分隔符(这里用'-',可自行修改)
内容的提问来源于stack exchange,提问作者Ren Cantu
相关产品推荐
相关产品推荐

