【问题标题】:SQL - LAG Function - Running TotalSQL - LAG 函数 - 运行总计
【发布时间】:2019-10-03 11:14:54
【问题描述】:

希望有人可以帮忙。我不知道这是否可能,但可以。

使用连接到 Oracle 数据库的 SQL Developer。

我从查询中返回了以下数据集

Item  Qty  On Hand
A     6     88
A     6     88
A     6     88
B     2      4
B     1      4
B     2      4

对字段短缺使用 LAG 函数

Lag(Qty) Over (Partition By Item Order By Item) As Shortage

返回

Item  Qty  On_Hand   Shortage
----  ---  -------   ---------
A     6     88       NULL
A     6     88       6
A     6     88       6
B     2      4       NULL
B     1      4       1
B     2      4       2

我通过使用解决NULL值

Nvl(Lag(Qty) Over (Partition By Item Order By Item), On_Hand + Qty) As Shortage

(如果“LAG”值为 Null,则将 NULL 替换为 Current On_Hand - Qty)

Item  Qty  On_Hand   Shortage                                 
A     6     88        82
A     6     88         6
A     6     88         6
B     2      4         2
B     1      4         2
B     2      4         1

第一行没问题。我真正要找的是

Item  Qty  On_Hand   Shortage  Shortage2
                               (Funtion Below)  
A     6     88        82
A     6     88        76
A     6     88        70
B     2      4         2
B     1      4         1
B     2      4        -1

Shortage 列实际上是一个计算

前一行短缺值 - 当前行所需数量。

这可能吗?

我希望如此。

非常感谢任何人的帮助

问候

伊恩

【问题讨论】:

    标签: sql oracle select lag


    【解决方案1】:

    我想你想要一个累积的总和。但是,您需要一列来指定行的顺序,而您的数据中没有这样的列:

    select t.*,
           (on_hand - sum(qty) over (partition by item order by ?)) as shortage
    from t;
    

    你可以使用item,但结果并不稳定——也就是说,你可以运行相同的代码两次,得到不同的结果。

    【讨论】:

    • 数据的顺序目前仅按项目,但我可以添加一个二级排序来对该问题进行排序
    • 谢谢戈登。我将把它构建到我的查询中,看看我们是如何进行的。非常感谢您的时间和帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多