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で次レコードの値を参照する」の紹介でした。