Come posso generare una serie temporale in PostgreSQL?


Risposte:


14

Ottimizzare:

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

La data è irrilevante, quindi utilizzare costanti di data / ora arbitrarie. Il cast di timeè molto economico.
Ciò include il limite inferiore e superiore, quindi otteniamo '00:00' due volte . Usa '2000-01-01 23:59'come limite superiore per ottenerlo una sola volta.

Relazionato:


Trovo che qualcosa della data arbitraria sia molto brutta. Ma stavo pensando che sarebbe stato anche più veloce e migliore.
Evan Carroll,

Poiché la data è irrilevante, potrebbe anche essere arbitraria. È il modo più veloce.
Erwin Brandstetter,

7

Non sono sicuro se questo sia il modo migliore, ma possiamo usare generate_seriesper generare l'offset minimo 00:00:00e quindi semplicemente chiamare make_interval(mins=>)per ottenere l'intervallo da esso.

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

5

Mi è piaciuto il modo @EvanCarroll, ma ancora un'altra opzione -

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

Questo funzionerà solo a volte in alcuni luoghi. È soggetto al borking dell'ora legale. Vedi la mia risposta qui per maggiori informazioni.
Evan Carroll,

3

Un altro modo:

SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.