我是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
答案 0 :(得分:0)
LAG用于检索先前的值。 OVER部分指定窗口(将其视为主表的子表)。 当谈论前一个值时,您不想比较多个ID,因此您可以按ID进行PARTITION。这样,每个“子表”都包含一个ID。
当您谈论先前的值时,排序也很重要,这就是ORDER BY所解决的问题。您可以通过obs_date对每个包含单个ID的“子表”进行排序。
列别名解释了查询的作用。
LAG(x,1)
中的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