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

回答編集履歴

2

追記

2020/03/05 01:57

投稿

sazi
sazi

スコア25438

answer CHANGED
@@ -1,5 +1,31 @@
1
1
  こんな感じで。
2
2
  ```SQL
3
+ with テーブルA as (
4
+ select * from (values
5
+ ('2020/01/31', 'A', 9)
6
+ ,('2020/02/01', 'A', 7)
7
+ ,('2020/02/02', 'A', 2)
8
+ ,('2020/02/03', 'A', 4)
9
+ ,('2020/02/04', 'A', 2)
10
+ ,('2020/02/05', 'A', 3)
11
+ ,('2020/01/31', 'B', 1)
12
+ ,('2020/02/01', 'B', 2)
13
+ ,('2020/02/02', 'B', 2)
14
+ ,('2020/02/03', 'B', 1)
15
+ ,('2020/02/04', 'B', 6)
16
+ ,('2020/02/05', 'B', 1)
17
+ ) as w(日付,管理ID,数値A)
18
+
19
+ ) , テーブルB as (
20
+ select * from (values
21
+ ('2020/01/31', 'A', 10)
22
+ ,('2020/02/02', 'A', 11)
23
+ ,('2020/02/05', 'A', 12)
24
+ ,('2020/01/31', 'B', 20)
25
+ ,('2020/02/01', 'B', 21)
26
+ ,('2020/02/05', 'B', 22)
27
+ ) as w(日付,管理ID,数値B)
28
+ )
3
29
  select ta.日付, ta.管理id, ta.数値A
4
30
  ,(select 数値B from テーブルB
5
31
  where 管理id=ta.管理id
@@ -9,4 +35,47 @@
9
35
  )
10
36
  ) 数値B
11
37
  from テーブルA ta
38
+ ```
39
+
40
+ 追記
41
+ --
42
+ 2つのテーブルの中間テーブルに該当するインラインビューでリレーション
43
+ ```SQL
44
+ with テーブルA as (
45
+ select * from (values
46
+ ('2020/01/31', 'A', 9)
47
+ ,('2020/02/01', 'A', 7)
48
+ ,('2020/02/02', 'A', 2)
49
+ ,('2020/02/03', 'A', 4)
50
+ ,('2020/02/04', 'A', 2)
51
+ ,('2020/02/05', 'A', 3)
52
+ ,('2020/01/31', 'B', 1)
53
+ ,('2020/02/01', 'B', 2)
54
+ ,('2020/02/02', 'B', 2)
55
+ ,('2020/02/03', 'B', 1)
56
+ ,('2020/02/04', 'B', 6)
57
+ ,('2020/02/05', 'B', 1)
58
+ ) as w(日付,管理ID,数値A)
59
+
60
+ ) , テーブルB as (
61
+ select * from (values
62
+ ('2020/01/31', 'A', 10)
63
+ ,('2020/02/02', 'A', 11)
64
+ ,('2020/02/05', 'A', 12)
65
+ ,('2020/01/31', 'B', 20)
66
+ ,('2020/02/01', 'B', 21)
67
+ ,('2020/02/05', 'B', 22)
68
+ ) as w(日付,管理ID,数値B)
69
+ )
70
+ select ta.日付, ta.管理id, ta.数値A, tb.数値B
71
+ from テーブルA ta
72
+ left join (
73
+ select ta.管理ID, ta.日付 日付A, max(tb.日付) 日付B
74
+ from テーブルA ta inner join テーブルB tb
75
+ on ta.管理ID=tb.管理ID and ta.日付>=tb.日付
76
+ group by ta.管理ID, ta.日付
77
+ ) map
78
+ on ta.管理ID=map.管理id and ta.日付=map.日付A
79
+ left join テーブルB tb
80
+ on map.管理id=tb.管理id and map.日付B=tb.日付
12
81
  ```

1

訂正

2020/03/05 01:57

投稿

sazi
sazi

スコア25438

answer CHANGED
@@ -8,5 +8,5 @@
8
8
  where 管理id=ta.管理id and 日付<=ta.日付
9
9
  )
10
10
  ) 数値B
11
- from テーブルA ta left join テーブルB
11
+ from テーブルA ta
12
12
  ```