teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

訂正

2019/12/24 11:19

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -20,6 +20,6 @@
20
20
  from test
21
21
  )
22
22
  select test.No, range.開始日, test.値
23
- from range inner join test
23
+ from range left join test
24
24
  on range.開始日 between test.開始日 and test.終了日
25
25
  ```

1

追記

2019/12/24 11:19

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,5 +1,14 @@
1
- **GENERATE_SERIES()**に与え範囲をデータの最小と最大ます
1
+ 求め結果はなっていますよ?
2
2
  ```SQL
3
+ select No, GENERATE_SERIES(開始日, 終了日,'1 day'::interval)::date 開始日, 値
4
+ from (values
5
+ (1,'2019/12/01'::date, '2019/12/05'::date, 12345)
6
+ , (2,'2019/12/06'::date, '2019/12/07'::date, 99999)
7
+ ) as w(No, 開始日, 終了日, 値)
8
+ ```
9
+
10
+ データの存在しない日付も出力したいのなら、**GENERATE_SERIES()**に与える範囲をデータの最小と最大にします。
11
+ ```SQL
3
12
  with test as (
4
13
  select *
5
14
  from (values
@@ -7,10 +16,10 @@
7
16
  , (2,'2019/12/06'::date, '2019/12/07'::date, 99999)
8
17
  ) as w(No, 開始日, 終了日, 値)
9
18
  ), range as (
10
- select GENERATE_SERIES(min(開始日), max(終了日),'1 day'::interval)::date 範囲
19
+ select GENERATE_SERIES(min(開始日), max(終了日),'1 day'::interval)::date 開始
11
20
  from test
12
21
  )
13
- select range.範囲日, test.値
22
+ select test.No, range.開始日, test.値
14
23
  from range inner join test
15
- on range.範囲日 between test.開始日 and test.終了日
24
+ on range.開始日 between test.開始日 and test.終了日
16
25
  ```