[小菜一碟] SQL Server 利用 LAG 及 LEAD 函數取得上一筆及下一筆資料列,來與當前資料列進行運算。

上一篇文章提到依日期彙總結果,這時候老闆又開需求了「Johnny 啊,能不能幫我多加一個欄位,讓我看到每個分店當月銷售額與上個月銷售額相比的成長百分比?」,這個需求也很常出現在我的程式設計生涯當中,我們來看看在 SQL Server 中怎麼來實現。

這個需求我們需要動用到 LAGLEAD 函數,這兩個函數從 SQL Server 2012 開始支援,主要的用途就是方便我們取得上 n 筆及下 n 筆資料列中的某個欄位,所以假定我們已經彙總出每個分店每個月的銷售額如下:

我們就調用 LAG 函數來幫我們取得上一個月的銷售額,LAG 函數必須給入兩個參數:指定的欄位位移的列數預設值則是選擇性的,然後需要搭配 OVER ( [ partition_by_clause ] order_by_clause) 語法來指定排序的規則,或者需不需要再依結果分組。

當月的銷售額有了,上個月的銷售額也有了,我們就可以來計算成長率了。

那 LEAD 呢? 我們就換用 LEAD 函數來試試看,使用的方式完全跟 LAG 函數一樣,差別在於如果要做到一樣的結果,需要降冪排序。