用sas分析一張表,怎么比較相鄰兩行某列資料并做減法,然后輸出,求大佬指點
uj5u.com熱心網友回復:
開窗行數里面有 lag與lead函式,可以獲取相鄰資料uj5u.com熱心網友回復:
lag(“欄位值”, 向上獲取的欄位的行數,沒有獲取到的欄位之后回傳的默認值) over(partition by 磁區欄位值 order by 排序欄位值)lead(“欄位值”, 向下獲取的欄位的行數,沒有獲取到的欄位之后回傳的默認值) over(partition by 磁區欄位值 order by 排序欄位值)
利用上面的兩個內置函式就可以解決同一列的欄位值的獲取。
比如:資料表 table
列欄位num
1
4
求兩行資料的減法
select
num-lag(num,1,0) over(order by num)
from table ;
結果為
1
3
解讀
第一行進行計算,向上查找沒有數字,默認為0 ,所以1-0=1
第二行進行計算,向上查找一行,數字為1,4-1=3
over為開窗函式,over(開窗依據,每個視窗的排序規則)
開窗依據
distribute by
partition by
排序規則
distribute by + sort by
partition by + order by
注:一個over只對應一個聚合函式
over子句不可單獨使用
1)配合聚合函式使用,求的是每一個視窗內的聚合
聚合函式 + over子句(distribute by)
求的是整個視窗的整體聚合
聚合函式 + over子句(distribute by + sort by)
求的是截至到排序資料前的聚合 當前
執行順序:distinct by整個視窗 ----sort by一條 -----聚合函式
2)配合row_number使用
在over視窗中加行號
看不懂我的可以去百度一下
uj5u.com熱心網友回復:
謝謝老師!很詳細!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/51330.html
標籤:數據倉庫
上一篇:hive鎖表機制產生的問題
