小编典典

SQL Server:选择总和与值匹配的最新行

sql

这是一张表…

ID    QTY    DATE    CURRENT_STOCK
----------------------------------
1     1      Jan     30
2     1      Feb     30
3     2      Mar     30
4     6      Apr     30
5     8      May     30
6     21     Jun     30

我需要返回总数量等于或超过当前库存水平的最新行,一旦达到总数,就不包括任何其他行,因此我希望只看到这些行…

ID    QTY    DATE    CURRENT_STOCK
----------------------------------
4     6      Apr     30
5     8      May     30
6     21     Jun     30

我假设我需要CTE(公用表表达式),并且已经看过这个问题,但是看不到如何将其转换为我的要求。

帮助!?


阅读 177

收藏
2021-04-14

共1个答案

小编典典

Declare @YourTable table (ID int,QTY int,DATE varchar(25), CURRENT_STOCK int)
Insert Into @YourTable values
(1 ,1 ,’Jan’ ,30),
(2 ,1 ,’Feb’ ,30),
(3 ,2 ,’Mar’ ,30),
(4 ,6 ,’Apr’ ,30),
(5 ,8 ,’May’ ,30),
(6 ,21 ,’Jun’ ,30)

Select A.*
 From  @YourTable A
 Where ID>= (
                Select LastID=max(ID)
                 From  @YourTable A
                 Cross Apply (Select RT = sum(Qty) from @YourTable where ID>=A.ID) B
                 Where B.RT>=CURRENT_STOCK
             )

Returns

ID  QTY DATE    CURRENT_STOCK
4   6   Apr     30
5   8   May     30
6   21  Jun     30
2021-04-14