您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關oracle中LAG函數怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
該內容來自官方翻譯,因為今天看到一個查詢語句中使用該函數,不是太明白用法,這里先簡單了解一下。
LAG是一個分析函數,主要提供用于同時訪問多行數據,且此數據不通過自連接獲取。當從查詢獲取多行值和一個位置游標,LAG會訪問游標位置中物理偏移量優先的數據,
offset(偏移量)參數為一個大于0的可選整數值。如果不指定偏移量,默認值為1。
當offset超過顯示范圍,則顯示選項default的值。如果不指定default值,則默認為空。
{RESPECT | IGNORE} NULLS選項決定是否將空值或VALUE_EXPR表達式的值包含在內,或將這些值淘汰掉,默認為RESPECT NULLS
對于表達式VALUE_EXPR,不可以在LAG中嵌套使用任何其他的分析函數,但可以使用內建函數。
文檔中給出的列子比較具有代表性:
SELECT hire_date, last_name, salary, LAG(salary, 1, 0 ) OVER (ORDER BY hire_date) AS prev_sal FROM employees WHERE job_id = 'PU_CLERK' ORDER BY hire_date; HIRE_DATE LAST_NAME SALARY PREV_SAL ------------------- --------------------------------------------------------------------------- ---------- ---------- 2003-05-18 00:00:00 Khoo 3100 0 2005-07-24 00:00:00 Tobias 2800 3100 2005-12-24 00:00:00 Baida 2900 2800 2006-11-15 00:00:00 Himuro 2600 2900 2007-08-10 00:00:00 Colmenares 2500 2600
如何理解LAG工作的機制,因為獲取的結果是多行數據:
SQL> select hire_date,last_name,salary from employees where job_id = 'PU_CLERK' order by hire_date; HIRE_DATE LAST_NAME SALARY ------------------- --------------------------------------------------------------------------- ---------- 2003-05-18 00:00:00 Khoo 3100 2005-07-24 00:00:00 Tobias 2800 2005-12-24 00:00:00 Baida 2900 2006-11-15 00:00:00 Himuro 2600 2007-08-10 00:00:00 Colmenares 2500
從上下兩個查詢結果不難看出,LAG將查詢的結果進行偏移,其偏移量為1,獲得了上一個查詢結果,而第一行記錄(salary=3100)的上一個查詢不存在的時候,offset超過了顯示范圍,所以用指定的default值0替代。
感謝各位的閱讀!關于“oracle中LAG函數怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。