计算Postgresql中两列之间的运行差异

Posted

技术标签:

【中文标题】计算Postgresql中两列之间的运行差异【英文标题】:Calculate running difference between two columns in Postgresql 【发布时间】:2020-09-24 19:02:32 【问题描述】:

我有如下两个表中的数据

表 1:

Material |Ordr Qty 
---------|---------
abcd     |4253

表 2:

Material | Stck Qty 
---------|---------
abcd     |1000
abcd     |2000
abcd     |2000

预期输出:

Material |Ordr Qty |Stck Qty |Column D
---------|---------|---------|---------
abcd     |4253     |1000     |3253
abcd     |4253     |2000     |1253
abcd     |4253     |2000     |-747

D 列的逻辑类似于

4253-1000 = 3253
3253-2000 = 1253
1253-2000 = -747

LAG(ordr qty - stck qty,1,0)over (ORDER BY material)-stck qty

我正在尝试 LAG 函数并低于输出

abcd    4253    1000    -1000
abcd    4253    2000    1253
abcd    4253    2000    253

让我知道如何实现预期的输出。

【问题讨论】:

【参考方案1】:

考虑一个窗口sum() 而不是lag()

select t1.*, t2.stck_qty,
    t1.ordr_qty - sum(t2.stck_qty) over(partition by material order by t2.id)
from t1
inner join t2 using(material)
order by material, t2.id

要获得稳定的结果,您需要一个定义t2 中行顺序的列:我假设id

【讨论】:

以上是关于计算Postgresql中两列之间的运行差异的主要内容,如果未能解决你的问题,请参考以下文章

mysql中两列之间的区别

使用python返回excel中两个不同文件中两列之间的差异

如何找到两列数据之间的差异?

如何获得 PostgreSQL 中的两个平均值之间的差异,平均值在列上,最终表按两列分组?

pyspark数据框中两列之间的时间差

公差变量中两张照片之间的差异