回答編集履歴

2

訂正

2019/12/24 11:19

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  select test.No, range.開始日, test.値
44
44
 
45
- from range inner join test
45
+ from range left join test
46
46
 
47
47
  on range.開始日 between test.開始日 and test.終了日
48
48
 

1

追記

2019/12/24 11:19

投稿

sazi
sazi

スコア25327

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