回答編集履歴

2

追記

2020/03/05 01:57

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -1,6 +1,58 @@
1
1
  こんな感じで。
2
2
 
3
3
  ```SQL
4
+
5
+ with テーブルA as (
6
+
7
+ select * from (values
8
+
9
+ ('2020/01/31', 'A', 9)
10
+
11
+ ,('2020/02/01', 'A', 7)
12
+
13
+ ,('2020/02/02', 'A', 2)
14
+
15
+ ,('2020/02/03', 'A', 4)
16
+
17
+ ,('2020/02/04', 'A', 2)
18
+
19
+ ,('2020/02/05', 'A', 3)
20
+
21
+ ,('2020/01/31', 'B', 1)
22
+
23
+ ,('2020/02/01', 'B', 2)
24
+
25
+ ,('2020/02/02', 'B', 2)
26
+
27
+ ,('2020/02/03', 'B', 1)
28
+
29
+ ,('2020/02/04', 'B', 6)
30
+
31
+ ,('2020/02/05', 'B', 1)
32
+
33
+ ) as w(日付,管理ID,数値A)
34
+
35
+
36
+
37
+ ) , テーブルB as (
38
+
39
+ select * from (values
40
+
41
+ ('2020/01/31', 'A', 10)
42
+
43
+ ,('2020/02/02', 'A', 11)
44
+
45
+ ,('2020/02/05', 'A', 12)
46
+
47
+ ,('2020/01/31', 'B', 20)
48
+
49
+ ,('2020/02/01', 'B', 21)
50
+
51
+ ,('2020/02/05', 'B', 22)
52
+
53
+ ) as w(日付,管理ID,数値B)
54
+
55
+ )
4
56
 
5
57
  select ta.日付, ta.管理id, ta.数値A
6
58
 
@@ -21,3 +73,89 @@
21
73
  from テーブルA ta
22
74
 
23
75
  ```
76
+
77
+
78
+
79
+ 追記
80
+
81
+ --
82
+
83
+ 2つのテーブルの中間テーブルに該当するインラインビューでリレーション
84
+
85
+ ```SQL
86
+
87
+ with テーブルA as (
88
+
89
+ select * from (values
90
+
91
+ ('2020/01/31', 'A', 9)
92
+
93
+ ,('2020/02/01', 'A', 7)
94
+
95
+ ,('2020/02/02', 'A', 2)
96
+
97
+ ,('2020/02/03', 'A', 4)
98
+
99
+ ,('2020/02/04', 'A', 2)
100
+
101
+ ,('2020/02/05', 'A', 3)
102
+
103
+ ,('2020/01/31', 'B', 1)
104
+
105
+ ,('2020/02/01', 'B', 2)
106
+
107
+ ,('2020/02/02', 'B', 2)
108
+
109
+ ,('2020/02/03', 'B', 1)
110
+
111
+ ,('2020/02/04', 'B', 6)
112
+
113
+ ,('2020/02/05', 'B', 1)
114
+
115
+ ) as w(日付,管理ID,数値A)
116
+
117
+
118
+
119
+ ) , テーブルB as (
120
+
121
+ select * from (values
122
+
123
+ ('2020/01/31', 'A', 10)
124
+
125
+ ,('2020/02/02', 'A', 11)
126
+
127
+ ,('2020/02/05', 'A', 12)
128
+
129
+ ,('2020/01/31', 'B', 20)
130
+
131
+ ,('2020/02/01', 'B', 21)
132
+
133
+ ,('2020/02/05', 'B', 22)
134
+
135
+ ) as w(日付,管理ID,数値B)
136
+
137
+ )
138
+
139
+ select ta.日付, ta.管理id, ta.数値A, tb.数値B
140
+
141
+ from テーブルA ta
142
+
143
+ left join (
144
+
145
+ select ta.管理ID, ta.日付 日付A, max(tb.日付) 日付B
146
+
147
+ from テーブルA ta inner join テーブルB tb
148
+
149
+ on ta.管理ID=tb.管理ID and ta.日付>=tb.日付
150
+
151
+ group by ta.管理ID, ta.日付
152
+
153
+ ) map
154
+
155
+ on ta.管理ID=map.管理id and ta.日付=map.日付A
156
+
157
+ left join テーブルB tb
158
+
159
+ on map.管理id=tb.管理id and map.日付B=tb.日付
160
+
161
+ ```

1

訂正

2020/03/05 01:57

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -18,6 +18,6 @@
18
18
 
19
19
  ) 数値B
20
20
 
21
- from テーブルA ta left join テーブルB
21
+ from テーブルA ta
22
22
 
23
23
  ```