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.