本文介紹了帶有WHERE子句的LAG()函數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個工作正常的SQL函數:
SELECT out_hum ,
(out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table
但我想在diference(Dif)等于0或大于某個值時選擇所有out_hum。當我鍵入此代碼時,出現錯誤…
SELECT out_hum ,
(out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table WHERE dif=0
如何解決此問題?
推薦答案
where
子句不能訪問select
子句中定義的表達式的別名(因為前者基本上是在之前處理的)。最重要的是,對窗口函數有一個特殊的限制,不能出現在查詢的where
子句中(它們只允許出現在select
ANorder by
子句中)。
典型的解決方案是使用派生表,例如子查詢:
select *
from (
select out_hum, out_hum - lag(out_hum) over (order by id) as dif
from excel_table
) t
where dif = 0
備注:
減法符號前后不需要括號
1
是lag()
的第二個參數的默認值,因此無需指定
這篇關于帶有WHERE子句的LAG()函數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,