SQL Server でウィンドウ関数を使い,1行前の行を取得するではウィンドウ関数を用いて1行前の行を取得した.今回は LAG 関数を用いて1行前の行を取得する.
EMERGENCYDB の Temperature テーブル定義
USE [EMERGENCYDB] GO CREATE TABLE [dbo].[Temperature]( [年月日] [date] NOT NULL, [都道府県] [nvarchar](50) NOT NULL, [日別最高気温] [float] NOT NULL, [都道府県コード] [nvarchar](2) NOT NULL ) ON [PRIMARY] GO
クエリ
下記クエリを発行して結果を得る.LAG 関数は前の行を,LEAD 関数は後の行を取得する.
USE EMERGENCYDB; GO SELECT 年月日 , 都道府県 , LAG(日別最高気温, 1) OVER (PARTITION BY 都道府県コード ORDER BY 都道府県コード, 年月日) AS 前日最高気温 , 日別最高気温 , LEAD(日別最高気温,1) OVER (PARTITION BY 都道府県コード ORDER BY 都道府県コード, 年月日) AS 翌日最高気温 FROM dbo.Temperature
(111708 行処理されました)
結果
結果が取得されている.最初の5行だけ示す.
年月日 都道府県 前日最高気温 日別最高気温 翌日最高気温 2008-04-01 北海道 NULL 4.3 8.4 2008-04-02 北海道 4.3 8.4 9.8 2008-04-03 北海道 8.4 9.8 11.8 2008-04-04 北海道 9.8 11.8 9.8 2008-04-05 北海道 11.8 9.8 14.5
まとめ
n 行前の行を取得するには MAX 関数などの極値関数を用いる方法と,LAG 関数を用いる方法とがある.n 行前後を求めるだけならいずれでも良いが,汎用性を考えると極値関数を用いて ROWS BETWEEN 句を用いる方法を覚えたほうが良いだろう.