sql中的当前行+上一行

深度SQL

我有一张像

beginv  nm  nm1 qty qty1    endinv  seq
0        a  ab1 5   7          0    1
0        a  ab2 15  7          0    2
0        a  ab3 11  9          0    3
0        a  ab3 11  9          0    4
0        a  ab3 11  9          0    5
0        b  ab2 10  14         0    1
0        b  ab3 11  9          0    2
0        c  ab1 11  9          0    1
0        c  ab2 15  9          0    2
0        c  ab3 15  9          0    3

有没有办法显示如下

beginv  nm  nm1 qty qty1    endinv  seq
0        a  ab1 5   7          7    1
0        a  ab2 15  7          15   2
0        a  ab3 11  9          17   3
0        a  ab3 11  9          17   4
0        a  ab3 11  9          17   5
0        b  ab2 10  14         14   1
0        b  ab3 11  9          16   2
0        c  ab1 11  9          9    1
0        c  ab2 15  9          15   2
0        c  ab3 15  9          21   3

如果 seq 为 1,则 endinv=qty1 else (previous)endinv+(qty-qty1) 和相同的 nm,nm1 正在重复然后之前的 endiv(例如,“a”和“ab3”以相同的 endinv 值重复三次)

拉努

似乎你可以用几个窗口条件来做到这一点SUM但是请注意,这样做的结果相符,在您预期的结果,但是我假设那是因为你预期的结果是错误的。您声明所需的逻辑是"(previous)endinv+(qty-qty1)",但是,当seq值为4nma,值为endinvin 17然而,应用你的逻辑,你有17 + 11 - 9which 等于19 not 17

SELECT beginv,
       nm,
       nm1,
       qty,
       qty1,
       SUM(CASE seq WHEN 1 THEN qty1 ELSE qty END) OVER (PARTITION BY nm ORDER BY seq ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) -
       SUM(CASE seq WHEN 1 THEN 0 ELSE qty1 END) OVER (PARTITION BY nm ORDER BY seq ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS endinv,
       seq
FROM (VALUES(0,'a','ab1',5 ,7 ,0,1),
            (0,'a','ab2',15,7 ,0,2),
            (0,'a','ab3',11,9 ,0,3),
            (0,'a','ab3',11,9 ,0,4),
            (0,'a','ab3',11,9 ,0,5),
            (0,'b','ab2',10,14,0,1),
            (0,'b','ab3',11,9 ,0,2),
            (0,'c','ab1',11,9 ,0,1),
            (0,'c','ab2',15,9 ,0,2),
            (0,'c','ab3',15,9 ,0,3))V(beginv,nm,nm1,qty,qty1,endinv,seq);

数据库<>小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在sql server的当前行中获取前一行的值

比较oracle sql中的当前行和下一行

比较当前行与 SQL Server 中的上一行

从Pandas列中的当前行值中减去上一行的值

如何计算表格的上一行并显示在表格的当前行中?

将 java 中的当前行和上一行与扫描仪进行比较

如何从另一行获取值以放置在熊猫数据框中的当前行中?

更新表中的当前行和下一行

从表中的当前行遍历到前一行

访问前一行以在R中的当前行中进行计算

比较awk中的当前行和下一行

复合需要从前一行计算并插入 Pyspark 中的当前行

计算 Postgres SQL 中当前行和上一行的值

在熊猫.loc []分配中访问下一行,上一行或当前行

如何从熊猫数据框中的当前行中减去上一行,以创建一个新列以每个名称重新启动该过程?

基于另一列的当前行和同一列的上一行的列的增量值

检查下一行中的值,以便将某些规则应用于Python中的当前行

如果下一行值与MySQL 8中的当前行值相同,如何获取持续时间之和

如何在SQL Server 2008中获得当前行与上一行之间的百分比

总结当前行与上一行的区别

SSRS比较当前行和上一行

计算当前行和上一行的2列

加入当前行和上一行之间的范围

比较当前行值和上一行值

PHP Oracle从当前行减去上一行

sql根据日期时间查询当前行和上一行之间的差异

使用当前行和上一行值进行Oracle SQL数学计算

VBScript和SQL Server 2005将当前行与上一行进行比较

使用前一行的值和当前行值计算 SQL 中的值