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


9

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

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

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

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

回答:


14

最適化するには:

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' 2回取得されます。'2000-01-01 23:59'上限として使用して、一度だけ取得します。

関連:


私は任意の日付について何かが非常に醜いと感じます。しかし、実際にはそれがより速く、より良いものになると思っていました。
エヴァンキャロル

日付は無関係であるため、任意の日付にすることもできます。それが最速の方法です。
Erwin Brandstetter 2016

6

これが最善の方法かどうかはわかりませんが、を使用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);


3

別の方法:

SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.