BETA

前後のレコードを参照するSQL-Window関数

投稿日:2019-08-16
最終更新:2019-08-16

SQLの行間比較、たまに使用する機会が出てきますがその都度忘れているので残しておきます。
(DatabaseはSQL-Serverで試しています)

以下のようなid毎にタイムスタンプが格納されているテーブルがあるとします。
クエリ①-SQL Fiddle

--Table作成  
CREATE TABLE Table1  
    ([id] varchar(2), [timestamp1] datetime)  
;  

--データ作成  
INSERT INTO Table1  
    ([id], [timestamp1])  
VALUES  
    ('A', convert(datetime,'2019/01/01 08:00:00',111)),  
    ('A', convert(datetime,'2019/01/01 09:00:00',111)),  
    ('A', convert(datetime,'2019/01/01 10:00:00',111)),  
    ('B', convert(datetime,'2019/01/01 08:00:00',111)),  
    ('B', convert(datetime,'2019/01/01 09:00:00',111)),  
    ('B', convert(datetime,'2019/01/01 10:00:00',111))  
    ;  

この1レコードの列に「現在の行のタイムスタンプ」「次の行のタイムスタンプ」を表示したい場合
Window関数を使用することで実現できます。

SELECT  
  id,  
  timestamp1 current_col ,  
  max(timestamp1) over (  
    partition by id  
    order by timestamp1 rows  
    between 1 following and 1 following   
      ) as next_col  
  FROM  
  Table1  
  • partition by idを指定することで、id毎にグループ化した上で次の行を参照します。
  • 次の行を参照する場合にはfollowing句を使用、前の行を参照する場合にはpreceding句を使用します。

結果は以下の通りになります。

クエリ②SQL Fiddle

参考書籍-達人に学ぶSQL徹底指南書

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@yayaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう