我有下表:
|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将检查第三行和第四行中的压力,依此类推。
如果我理解正确,你想要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;