输入 记录前值 后值 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 个输入集是分开的并按顺序放置,但在实际场景中,可以随机填充行
................................................ ................................................
你可以使用滞后
使用滞后函数:
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