SQL在case语句中比较一列中的多个数字

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

我有下表:

|n|Minutes|Pressure|
--------------------
|1|0.5    |2.8     |
|2|1      |3.2     |
|3|1.5    |3.3     |

我需要检查1分钟的压力> 0.5分钟的压力和1.5分钟的压力> 1分钟的压力,如果为真则返回1,如果为假则返回0。这是使用以下公式在excel中完成的:

=IF(AND(B11<B10,B12<B11),1,0)

我想要以下输出

|n|Minutes|Pressure|dP|
-----------------------
|1|0.5    |2.8     |1 |
|2|1      |3.2     |1 |
|3|1.5    |3.3     |1 |

我对SQL很熟悉,知道使用case语句和两个标准,但是我需要一些指导,在整个表中迭代检查。基本上,第一行中的dP检查第二行和第三行中的压力,然后第二行中的dP将检查第三行和第四行中的压力,依此类推。

sql amazon-web-services amazon-athena prestodb
1个回答
0
投票

如果我理解正确,你想要lead()

select t.*,
       (case when lead(pressure, 1) over (order by n) < pressure and
                  lead(pressure, 2) over (order by n) < lead(pressure, 1) over (order by n)
             then 1 else 0
        end) as dp
from t;
© www.soinside.com 2019 - 2024. All rights reserved.