簡體   English   中英

誰能幫我理解這個 SQL 代碼?

[英]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 的每個“子表”進行排序。

查詢的作用由列別名解釋。

  • prev_obs_date - 以前obs_date(用於current_id)
  • prev_imp_vol - 前一個 imp_vol(對於 current_id)
  • absolute_change - 當前 imp_vol 和前一個 imp_vol 之間的差異

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM