Wie generiere ich eine Zeitreihe in PostgreSQL?

Antworten:

14

Optimieren:

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

Das Datum ist irrelevant. Verwenden Sie daher beliebige Zeitstempelkonstanten. Die Besetzung timeist sehr billig.
Dies schließt die Unter- und Obergrenze ein, sodass wir '00:00' zweimal bekommen . Verwenden Sie '2000-01-01 23:59'als Obergrenze, um es nur einmal zu erhalten.

Verbunden:

Erwin Brandstetter
quelle
Ich finde etwas an dem willkürlichen Datum sehr hässlich. Aber ich dachte, es wäre tatsächlich auch schneller und besser.
Evan Carroll
Da das Datum irrelevant ist, kann es auch beliebig sein. Es ist der schnellste Weg.
Erwin Brandstetter
6

Ich bin mir nicht sicher, ob dies der beste Weg ist, aber wir können generate_seriesden Min-Offset daraus generieren 00:00:00und dann einfach aufrufen make_interval(mins=>), um das Intervall daraus zu erhalten.

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

Ich mochte @EvanCarroll Weg, aber noch eine andere Option -

select  x::time
from    generate_series 
            (current_date,current_date + '1 day - 1 second'::interval,'5 minute') as t(x);
David דודו Markovitz
quelle
Dies funktioniert nur manchmal an einigen Stellen. Es unterliegt der Sommerzeit. Siehe meine Antwort hier für weitere Informationen.
Evan Carroll
3

Ein anderer Weg:

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