4

これは、 Getting date list in a range in PostgreSQLに少し似ていますが、まったく同じではありません (と思います)。

すべての行に開始日と終了日が含まれる SQL テーブルがあります。行ごと、この範囲内の日付ごとに 1 つの結果が得られるように、クエリを作成したいと思います。

例えば:id=1, title=MyRange, start=2012-08-05, end=2012-08-08

クエリ:SELECT * FROM myTyble where id=1 AND ...

結果:

 id=1, title=MyRange, date=2012-08-05
 id=1, title=MyRange, date=2012-08-06
 id=1, title=MyRange, date=2012-08-07
 id=1, title=MyRange, date=2012-08-08

この結果セットで一意の主キー行が重複することはわかっていますが、それは問題ではありません。どんなアイデアでも大歓迎です!

4

1 に答える 1

5

generate_seriesそこから選ぶだけで簡単に参加できます。このような何かがうまくいくはずです:

select t.*
from generate_series('2010-01-01'::timestamp, '2013-01-01'::timestamp, '1 day') as s(d)
join your_table t on (s.d between t.start and t.end)

2010-01-01もちろん、代わりに必要な実際の日付を指定します2013-01-01

generate_series8.3 などの古いバージョンには、タイムスタンプで動作するはありませんが、を使用generate_seriesして最初の日付からの日付オフセットを生成することで偽造できます。

select t.*
from generate_series(0, 1096) dt(d)
join your_table t on ('2010-01-01'::date + dt.d between t.start and t.end)

0前と同様に、 、1096、およびを調整して、'2010-01-01'データに一致させます。

于 2012-09-22T06:47:13.617 に答える