今天在熟悉項目的某個功能模塊時,查看mybatis的映射文件內發現這樣的一串sql: 因原來進行開發時,並沒有用到此函數 所以在網上查詢了一點資料 對leadover的解釋如下: 換句話說就是通過這個函數能拿到當前列之前的第n條數據 例子: 目前有如下內容的一張表: 執行之後是這樣的result: ...
今天在熟悉項目的某個功能模塊時,查看mybatis的映射文件內發現這樣的一串sql:
(T.NET_VALUE - LEAD(T.NET_VALUE)OVER(ORDER BY T.ESTIMATE_DATE DESC, T.NET_VALUE)) / LEAD(T.NET_VALUE) OVER(ORDER BY T.ESTIMATE_DATE DESC,T.NET_VALUE)
因原來進行開發時,並沒有用到此函數 所以在網上查詢了一點資料 對leadover的解釋如下:
Lead分析函數可以在同一次查詢中獲取第N行後同樣欄位的數據作為獨立的列
換句話說就是通過這個函數能拿到當前列之前的第n條數據
例子:
目前有如下內容的一張表:
select rownum rn, temp.* from (select 1 as id from dual union select 2 as id from dual union select 3 as id from dual union select 4 as id from dual) temp
執行之後是這樣的result:
再執行以下sql:
select t.rn, lead(t.rn) over(order by t.rn ) as next_val, from (select rownum rn, temp.* from (select 1 as id from dual union select 2 as id from dual union select 3 as id from dual union select 4 as id from dual) temp) t;
執行完之後result為:
可見函數的返回值是下一條數據的rn這一列
跟lead函數相似的還有lag函數 不過lag函數式獲取上一條的數據 跟lead正好相反
這兩個函數可以在需要根據某一列的上一條或者下一條數據進行判斷的時候派上用場~