根据sql结果查找下一行和上一行

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

在此示例表 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

如何在查询中得到这个结果?

mysql sql row lag lead
1个回答
0
投票

我认为有几种方法可以解决这个问题。也许,您可以使用

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);

演示小提琴

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