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:


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);

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);

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.