查找前值的初始值和后值的最新值

问题描述 投票:0回答:1

输入 记录前值 后值 1 101 102 2 102 105 3 105 108 4 108 289 5 289 109 6 109 109 7 109 110 8 110 110

9 201 201 10 201 202 11 203 301 12 301 150 13 150 150

14 86 86 15 86 123 16 123 97 17 97 97 18 97 784

19 269 269 20 38 38

输出 初始前值 最新后值 101110 201 150 86784 269 269 38 38

我想找到起始的 INITIAL BEFORE VALUE 和 LATEST AFTER VALUE

什么是 INITIAL BEFORE VALUE - 它应该在后面的值或更早的行中找到。 最新的后值是什么 - 它应该在后续行的前值中找到

在此示例中,有 4 个输入集是分开的并按顺序放置,但在实际场景中,可以随机填充行

................................................ ................................................

sql postgresql
1个回答
0
投票

你可以使用滞后

使用滞后函数:

SELECT value - lag(value) OVER (ORDER BY Id) FROM table

或滞后和超前:

SELECT  value - (
        SELECT  TOP 1 value
        FROM    mytable m2
        WHERE   m2.col1 < m1.col1 OR (m2.col1 = m1.col1 AND m2.pk < m1.pk)
        ORDER BY 
                col1, pk
        )
FROM mytable m1
ORDER BY
      col1, pk

参见:访问 SELECT 语句中的“前一行”值

© www.soinside.com 2019 - 2024. All rights reserved.