PostgreSQLで連番付与(PostgreSQLでもROWNUM使いたい)

SELECTした順番に連番付けたいときありますよね。OracleだとROWNUMというものがあるらしいです。PostgreSQLでは、Ver8.4以降に実装されたWindows関数を利用するのが簡単だと思います。

Window関数ってのは、GROUP BYを集約せず、それぞれのROWに対して関数を摘要するものです。データの中に窓を作るイメージからWindow関数と呼ぶのでしょう。

さて、本題の連番を付ける方法です。

SELECT 
	row_number() OVER (ORDER BY timestamp) AS i,
	timestamp 
FROM usdjpy

row_number() OVER (ORDER BY timestamp)が肝となる部分です。連番を付けたい順番を指定しましょう。

Window関数 — Let's Postgresにあるように下記のような書き方もあるみたいですね。

SELECT row_number() OVER (), *
  FROM (SELECT * FROM tbl ORDER BY sortkey) AS t;