SQL Serverで次レコードの値を参照する
前回は前レコードの値を参照するSQLを紹介しましたが、今回は次レコードの値を参照するSQLを紹介します。
コーディング例
BEGIN
CREATE TABLE #勤怠(
氏名 VARCHAR(10)
,年月 INT
,日 INT
,勤務時間 INT
);
INSERT INTO
#勤怠
VALUES
('佐藤',201909,1,500)
,('佐藤',201909,2,550)
,('佐藤',201909,3,0)
,('山本',201909,1,0)
,('山本',201909,2,460)
,('山本',201909,3,510)
,('田中',201909,1,520)
,('田中',201909,2,620)
,('田中',201909,3,0)
,('佐藤',201910,1,500)
;
SELECT
氏名
,日
,勤務時間
,ISNULL(SUM(日) OVER (PARTITION BY 氏名 ORDER BY 日 ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING),999) AS [前日]
FROM
#勤怠
WHERE
年月 = 201909
GROUP BY
氏名
,勤務時間
,日
ORDER BY
氏名
,日
;
DROP TABLE #勤怠;
END
実行結果
| 氏名 | 日 | 勤務時間 | 前日 |
|---|---|---|---|
| 佐藤 | 1 | 500 | 2 |
| 佐藤 | 2 | 550 | 3 |
| 佐藤 | 3 | 0 | 999 |
| 山本 | 1 | 0 | 2 |
| 山本 | 2 | 460 | 3 |
| 山本 | 3 | 510 | 999 |
| 田中 | 1 | 520 | 2 |
| 田中 | 2 | 620 | 3 |
| 田中 | 3 | 0 | 999 |
コーディングの28行目では、OVER句で「ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING」と指定しており、「FOLLOWING」は日本語訳すると「次の」という意味で、「1 FOLLOWING」は「1つ次」という意味になります。
よって、「ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING」は「1つ次のレコードから1つ次のレコードまで」という意味となり、次レコードが参照できます。
以上、「SQL Serverで次レコードの値を参照する」の紹介でした。








