質問編集履歴
4
訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,7 +15,8 @@
|
|
15
15
|
以下のような結果を期待しています。
|
16
16
|
~~どのようなSQLを書けば実現できますか?~~
|
17
17
|
※追記:実現はできました。
|
18
|
-
しかし、一時テーブルを作成
|
18
|
+
しかし、一時テーブルを作成する部分のSQLがパフォーマンスがよくなさそうです。
|
19
|
+
最初にproduct_id, dateをあらかじめ用意せずにできそうな気もしていますがやりかたが分かりません。
|
19
20
|
もっとよいSQLはありますでしょうか?
|
20
21
|
|
21
22
|

|
3
タグ追加
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
2
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -13,13 +13,50 @@
|
|
13
13
|
|
14
14
|
# 質問
|
15
15
|
以下のような結果を期待しています。
|
16
|
-
どのようなSQLを書けば実現できますか?
|
16
|
+
~~どのようなSQLを書けば実現できますか?~~
|
17
|
+
※追記:実現はできました。
|
18
|
+
しかし、一時テーブルを作成してから集計する事はパフォーマンスがよくなさそうです。
|
19
|
+
もっとよいSQLはありますでしょうか?
|
20
|
+
|
17
21
|

|
18
22
|
|
23
|
+
|
19
24
|
### 試したこと
|
20
|
-
`return_logs`にだけ`2023-01-04`が存在するので、`2023-01-04`が取得できるように日付専用で一時テーブルを作成してからJOINして集計を試みました。
|
21
|
-
しか
|
25
|
+
追記:以下のように一時テーブルを作成してから集計すると期待する結果が得られました。
|
26
|
+
```SQL
|
27
|
+
create temporary table `tmp_dates`
|
28
|
+
select
|
29
|
+
tmp.`product_id`,
|
30
|
+
tmp.`date`
|
31
|
+
from (
|
32
|
+
select `product_id`, `date` from sell_logs
|
33
|
+
union all
|
34
|
+
select `product_id`, `date` from return_logs
|
35
|
+
) tmp
|
36
|
+
;
|
22
37
|
|
38
|
+
select
|
39
|
+
p.id,
|
40
|
+
p.`name`,
|
41
|
+
td.`date`,
|
42
|
+
sl.`num`,
|
43
|
+
rl.`num`
|
44
|
+
from `tmp_dates` td
|
45
|
+
left outer join sell_logs sl on sl.`product_id` = td.`product_id` and sl.`date` = td.`date`
|
46
|
+
left outer join return_logs rl on rl.`product_id` = td.`product_id` and rl.`date` = td.`date`
|
47
|
+
inner join products p on p.id = td.product_id
|
48
|
+
|
49
|
+
group by
|
50
|
+
p.`id`,
|
51
|
+
td.`date`;
|
52
|
+
```
|
53
|
+
|
54
|
+
|
55
|
+
~~`return_logs`にだけ`2023-01-04`が存在するので、`2023-01-04`が取得できるように日付専用で一時テーブルを作成してからJOINして集計を試みました。
|
56
|
+
しかし期待する結果が得られませんでした。~~
|
57
|
+
|
58
|
+
<s>
|
59
|
+
|
23
60
|
```SQL
|
24
61
|
/* 一時テーブルを作成して集計する */
|
25
62
|
create temporary table `tmp_dates`
|
@@ -47,6 +84,7 @@
|
|
47
84
|
p.`id`,
|
48
85
|
td.`date`;
|
49
86
|
```
|
87
|
+
</s>
|
50
88
|
|
51
89
|
### ソースコード
|
52
90
|
https://dbfiddle.uk/tRKBk26A
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
しかし期待する結果が得られませんでした。
|
22
22
|
|
23
23
|
```SQL
|
24
|
+
/* 一時テーブルを作成して集計する */
|
24
25
|
create temporary table `tmp_dates`
|
25
26
|
select
|
26
27
|
tmp.`date`
|
@@ -30,6 +31,21 @@
|
|
30
31
|
select `date` from return_logs
|
31
32
|
) tmp
|
32
33
|
;
|
34
|
+
|
35
|
+
select
|
36
|
+
p.id,
|
37
|
+
p.`name`,
|
38
|
+
td.`date`,
|
39
|
+
sl.`num`,
|
40
|
+
rl.`num`
|
41
|
+
from `tmp_dates` td
|
42
|
+
left outer join sell_logs sl on sl.`date` = td.`date`
|
43
|
+
left outer join return_logs rl on rl.`date` = td.`date`
|
44
|
+
inner join products p on p.id = sl.product_id
|
45
|
+
|
46
|
+
group by
|
47
|
+
p.`id`,
|
48
|
+
td.`date`;
|
33
49
|
```
|
34
50
|
|
35
51
|
### ソースコード
|