SQL Serverで次レコードの値を参照する

2020-02-10SQLServer

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

 

株式会社システムトラスト

人材募集中です。

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ