在此示例表 fruits 中,我想获取上一行、当前行和下一行,其中 high_low_adjstmnt < 0.
Table
id name low high high_low_adjstmnt volume
1 Apple 5 3 -2 1000
2 Orange 6 9 3 2000
3 Banana 13 17 4 3000
4 Avocado 11 19 8 4000
5 Berry 21 17 -4 5000
6 Peach 7 9 2 6000
7 Mango 9 14 5 7000
8 Grape 18 11 7 8000
9 Kiwi 14 13 -1 9000
期望的输出结果
id name low high high_low_adjstmnt volume
1 Apple 5 3 -2 1000
2 Orange 6 9 3 2000
4 Avocado 11 19 8 4000
5 Berry 21 17 -4 5000
6 Peach 7 9 2 6000
8 Grape 18 11 7 8000
9 Kiwi 14 13 -1 9000
如何在查询中得到这个结果?
我认为有几种方法可以解决这个问题。也许,您可以使用
LAG()
和 LEAD()
函数来获取上一行和下一行的值,然后使用 cte
(或派生表)像这样过滤它们:
WITH cte AS (
SELECT *,
LAG(high_low_adjstmnt) OVER (ORDER BY id) PreviousRow,
LEAD(high_low_adjstmnt) OVER (ORDER BY id) NextRow
FROM Table1)
SELECT *
FROM cte
WHERE (high_low_adjstmnt < 0
OR PreviousRow < 0
OR NextRow < 0);