我們的目標是建立 1 個月滯後的列(而不是按行)。01/2000 的 LAG(M/Y) 列輸出應與 M/Y 列中的 02/2000 對齊,依此類推。附件是 m/y 用水量的小子集範例;然而,我們的完整表格包含超過 5900 萬行。完整表格包含多年來超過 43 萬名客戶每月的用水量。如果使用不同的列(例如 CONS_MONTH_NUM)會更容易或更直接,我們願意接受所有建議。使用 Group By 可以解決這個問題嗎?
Lag函數的作用是按行移動資料。 該函數沒有其他定義。
我可能會誤解目標。 您的意思是滯後變數(不是月/年)一個月,而不是行? 不需要基於行移位的滯後的一個問題是資料中有多個 ID,並且您不希望客戶 A 的資料溢出到客戶 B 的行。 JSL 技巧可以解決這個問題。 另一種不希望按行移位的情況是缺少觀測值。 例如,您有一年的月度系列,但缺少六月。 數據中不存在 6 月的行。 基於行移位的滯後會完全搞亂資料。 JSL可能沒有簡單的技巧。
如果我對目標的理解正確的話,我就有一個想法。 首先,為了方便說明,讓我們簡化數據。 我將資料縮減為三列:SP_ID、M/Y、WTR_GAL。 目標是根據 M/Y 時間按 SP_ID 移動 WTR_GAL。

我創建該表的副本,並創建另外兩列:

滯後 (M/Y) 的公式為

Lag WTR_GAL 的公式如下,它基本上是 WTR_GAL 的副本。

然後,我透過匹配 SP_ID 和 M/Y==Lag(M/Y) 將兩個表連接在一起。 這是加入對話框

這是結果

請注意,如果使用基於行移動的滯後,則必須注意突出顯示的單元格。 但在這裡,沒有基於行移位的滯後,結果正是我所期望的。 整個操作是將本月數據與上個月數據通過 JOIN 拼接起來,結果與「理想」LAG 操作相同。