本文介紹了帶有WHERE子句的LAG()函數(shù)的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我有一個(gè)工作正常的SQL函數(shù):
SELECT out_hum ,
(out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table
但我想在diference(Dif)等于0或大于某個(gè)值時(shí)選擇所有out_hum。當(dāng)我鍵入此代碼時(shí),出現(xiàn)錯(cuò)誤…
SELECT out_hum ,
(out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table WHERE dif=0
如何解決此問(wèn)題?
推薦答案
where
子句不能訪問(wèn)select
子句中定義的表達(dá)式的別名(因?yàn)榍罢呋旧鲜窃?em>之前處理的)。最重要的是,對(duì)窗口函數(shù)有一個(gè)特殊的限制,不能出現(xiàn)在查詢的where
子句中(它們只允許出現(xiàn)在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
備注:
減法符號(hào)前后不需要括號(hào)
1
是lag()
的第二個(gè)參數(shù)的默認(rèn)值,因此無(wú)需指定
這篇關(guān)于帶有WHERE子句的LAG()函數(shù)的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,