Comment générer une série temporelle dans PostgreSQL?


Réponses:


14

Optimiser:

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

La date n'est pas pertinente, utilisez donc des constantes d'horodatage arbitraires. Le casting timeest très bon marché.
Cela inclut les limites inférieure et supérieure, nous obtenons donc '00:00' deux fois . Utilisez '2000-01-01 23:59'comme limite supérieure pour l'obtenir une seule fois.

En relation:


Je trouve que la date arbitraire est très moche. Mais je pensais que ce serait en fait plus rapide et meilleur aussi.
Evan Carroll

Étant donné que la date n'est pas pertinente, elle peut tout aussi bien être arbitraire. C'est le moyen le plus rapide.
Erwin Brandstetter

6

Je ne sais pas si c'est la meilleure façon, mais nous pouvons utiliser generate_seriespour générer le min-offset à partir de 00:00:00, puis simplement appeler make_interval(mins=>)pour en obtenir l'intervalle.

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

5

J'ai aimé la manière @EvanCarroll, mais encore une autre option -

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

Cela ne fonctionnera que parfois dans certains endroits. Il est soumis au borking DST. Voir ma réponse ici pour plus d'informations.
Evan Carroll

3

Autrement:

SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.