web-dev-qa-db-ja.com

PostgreSQLで時系列を生成するにはどうすればよいですか?

日付系列を生成したい場合は、この質問を参照してください

5分ごとに24時間シリーズを生成するとします。 PostgreSQLでそれを行うにはどうすればよいですか?

PostgreSQLは generate_series()timestampから取得できますが、timeからは取得できません。

任意のタイムスタンプを選択する方が良いですか、それともシリーズを生成する別の方法がありますか?

9
Evan Carroll

最適化するには:

SELECT x::time
FROM   generate_series(timestamp '2000-01-01 00:00'
                     , timestamp '2000-01-02 00:00'
                     , interval  '5 min') t(x);

日付は無関係なので、任意のタイムスタンプ定数を使用します。 timeへのキャストは非常に安価です。
これには下限と上限が含まれるため、'00:00'twice。使用する '2000-01-01 23:59'上限として、一度だけ取得します。

関連:

14

これが最善の方法かどうかはわかりませんが、_generate_series_を使用して_00:00:00_から最小オフセットを生成し、make_interval(mins=>)を呼び出してそこから間隔を取得できます。

_SELECT make_interval(mins=>x)::time
FROM generate_series(0, 60*24-5, 5) AS t(x);
_
6
Evan Carroll

私は@EvanCarrollの方法が好きでしたが、さらに別のオプション-

select  x::time
from    generate_series 
            (current_date,current_date + '1 day - 1 second'::interval,'5 minute') as t(x);

別の方法:

SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);
3
ypercubeᵀᴹ