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.