[英]Can anyone help me understand this SQL code?
我是 SQL 新手,但熟悉 Python。 我正在嘗試將此代碼導入 Python,但我想了解它首先捕獲的數據類型......
任何人都可以向我解釋這個查詢的作用嗎? 特別是 LAG、OVER 和 PARTITION BY 函數? 非常感謝!
SELECT y.id, y.obs_date, y.imp_vol, LAG (obs_date,1)
over (Partition by id ORDER BY y.obs_date asc) as prev_obs_date, LAG (y.imp_vol,1)
over (partition by id ORDER BY y.obs_date asc) as prev_imp_vol,imp_vol - LAG (y.imp_vol,1)
over (partition by id ORDER BY y.obs_date asc) as absolute_change
FROM DMX.MDS_RS_OBS_EQUITY_VOL y
WHERE y.obs_date > sysdate - 15
ORDER BY id desc, obs_date desc
LAG 用於檢索先前的值。 過部分指定窗口(認為它像你的主表的子表)。 當你談論一個以前的值,你不想多個ID通過ID PARTITION比較,所以你。 這樣,每個“子表”都包含一個 id。
當您談論先前的值時,排序也很重要,這就是 ORDER BY 解決的問題。 您可以通過 obs_date 對包含單個 ID 的每個“子表”進行排序。
查詢的作用由列別名解釋。
LAG(x,1)
中的LAG(x,1)
指定距離為 1 的前一個值。如果您有一個包含 1,2,3,4,5 的表,這就是滯后的不同屬性將返回的內容
id LAG(id,1) LAG(id,2) LAG(id,3)
1 NULL NULL NULL
2 1 NULL NULL
3 2 1 NULL
4 3 2 1
5 4 3 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.