我有一個看起來像這樣的表:
name val
1 1
2 2
3 1
4 2
5 2
6 10
對于每一行,我想檢查與最后一個值相比,該值是否增加。然后,我想回傳上一個和下一個值較低的行。例如,在這種情況下,我想回傳
name val
2 2
但不是以下任何一項:
4 2
5 2
6 10
因為直到表格結束之前一直在增加,并且最后沒有減少。理想情況下,我還想name在開始比較之前按 col訂購表格val。
uj5u.com熱心網友回復:
您可以使用如下所示的超前和滯后函式撰寫查詢
解釋:
所以 lag 從前一行獲取 Val 列的資料,而 Lead 從下一行獲取資料
我們添加一個 case 陳述句來處理第一行的滯后和最后一行的領先資料的空值。要了解有關此鏈接上的領先滯后功能的更多資訊
select name, val
from
(select *,
CASE WHEN LAG(val) OVER( ORDER BY name) IS NULL THEN
val ELSE LAG(val) OVER( ORDER BY name) END asd prev_value,
CASE WHEN LEAD(val) OVER( ORDER BY name) IS NULL THEN val ELSE LEAD(val) OVER( ORDER BY name) END as next_value
from yourtable
)T
where prev_value<val AND val> next_value
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/459467.html
標籤:sql PostgreSQL 加入 where子句
下一篇:加入陣列內的元素
