在 SQL 中限制 LAG
limiting LAG in SQL
我正在使用 LAG 函数 return 以前的记录。由于记录在日期方面不一定是连续的,我决定采用 LAG 路线(如果有更好的方法请分享)。我 运行 遇到的问题是,当我每个项目只需要一个记录时,它会为我提供所有记录。我该如何限制结果?
这是每个人说的项目 a 的数据集:
PO Number
BillingDate
DiscountRecNo
item
0646546541
12/12/2021
4654064
4656
4651132066
10/13/2021
8984653
4655
4654113866
11/13/2021
6464651
4656
9865413488
08/05/2021
5461984
4655
对于此示例,我只需要 PO 编号 9865413488 用于商品 4655 和 4654113866 用于商品 4656。
这是我的
LAG(LT.CondRecNo, 1, 0) OVER(ORDER BY LT.BillingDate DESC) AS PREVIOUSCONDRECNO
看来你不需要 lag() 只需要 row_number()
with cte as
(select *,row_number()over(partition by item order by BillingDate) rn
) select a.* from cte whre rn=1
我正在使用 LAG 函数 return 以前的记录。由于记录在日期方面不一定是连续的,我决定采用 LAG 路线(如果有更好的方法请分享)。我 运行 遇到的问题是,当我每个项目只需要一个记录时,它会为我提供所有记录。我该如何限制结果?
这是每个人说的项目 a 的数据集:
PO Number | BillingDate | DiscountRecNo | item |
---|---|---|---|
0646546541 | 12/12/2021 | 4654064 | 4656 |
4651132066 | 10/13/2021 | 8984653 | 4655 |
4654113866 | 11/13/2021 | 6464651 | 4656 |
9865413488 | 08/05/2021 | 5461984 | 4655 |
对于此示例,我只需要 PO 编号 9865413488 用于商品 4655 和 4654113866 用于商品 4656。
这是我的
LAG(LT.CondRecNo, 1, 0) OVER(ORDER BY LT.BillingDate DESC) AS PREVIOUSCONDRECNO
看来你不需要 lag() 只需要 row_number()
with cte as
(select *,row_number()over(partition by item order by BillingDate) rn
) select a.* from cte whre rn=1