PostgreSQL'de nasıl zaman serisi oluşturabilirim?


Yanıtlar:


14

En iyi hale getirmek için:

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

Tarih önemsizdir, bu nedenle rastgele zaman damgası sabitlerini kullanın. Oyuncular timeçok ucuz.
Buna alt ve üst sınır dahildir, bu yüzden '00:00' iki kez alırız . '2000-01-01 23:59'Sadece bir kez almak için üst sınır olarak kullanın .

İlişkili:


Keyfi tarih hakkında çok çirkin bir şey buldum . Ama aslında daha hızlı ve daha iyi olacağını düşünüyordum.
Evan Carroll

Tarih ilgisiz olduğu için keyfi de olabilir. En hızlı yol.
Erwin Brandstetter

7

Bunun en iyi yol olup olmadığından emin değilim, ancak generate_seriesmin-offset'i oluşturmak için kullanabiliriz 00:00:00ve daha sonra make_interval(mins=>)aralığını almak için çağırırız .

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

5

@EvanCarroll yolunu beğendim, ama yine de başka bir seçenek -

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

Bu sadece bazen bir yerlerde işe yarayacaktır. Bu DST bozmaya tabidir. Daha fazla bilgi için cevabımı buraya bakın .
Evan Carroll

3

Diğer yol:

SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.