回答編集履歴
2
SQL文が実装に依存していた問題点を修正した
test
CHANGED
@@ -22,23 +22,43 @@
|
|
22
22
|
|
23
23
|
コメントを受けてクエリを考えました。以下でどうでしょう。
|
24
24
|
|
25
|
+
|
26
|
+
|
25
27
|
```SQL
|
26
28
|
|
27
|
-
|
29
|
+
-- 修正版 実装に依存していた書き方を改めた
|
28
30
|
|
29
|
-
|
31
|
+
select
|
30
32
|
|
31
|
-
|
33
|
+
test.id,
|
32
34
|
|
33
|
-
|
35
|
+
test.sale,
|
34
36
|
|
35
|
-
|
37
|
+
test.dt as 'date',
|
36
38
|
|
37
|
-
|
39
|
+
case when tmp.cnt < 3 then null else tmp.gokei end as 'sum'
|
38
40
|
|
39
|
-
o
|
41
|
+
from test inner join
|
40
42
|
|
43
|
+
(
|
44
|
+
|
45
|
+
select
|
46
|
+
|
47
|
+
a.id,
|
48
|
+
|
49
|
+
sum(b.sale) as gokei,
|
50
|
+
|
51
|
+
count(b.id) as cnt
|
52
|
+
|
53
|
+
from test as a inner join test as b
|
54
|
+
|
55
|
+
on (b.id >= a.id - 2 and b.id <= a.id)
|
56
|
+
|
41
|
-
group by a.id
|
57
|
+
group by a.id
|
58
|
+
|
59
|
+
) tmp
|
60
|
+
|
61
|
+
on (test.id = tmp.id)
|
42
62
|
|
43
63
|
```
|
44
64
|
|
1
SQL文追加
test
CHANGED
@@ -13,3 +13,63 @@
|
|
13
13
|
|
14
14
|
|
15
15
|
どちらが正しいのでしょうか。
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
*** 以下追記
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
コメントを受けてクエリを考えました。以下でどうでしょう。
|
24
|
+
|
25
|
+
```SQL
|
26
|
+
|
27
|
+
SELECT
|
28
|
+
|
29
|
+
a.id,
|
30
|
+
|
31
|
+
a.sale,
|
32
|
+
|
33
|
+
a.dt as 'date',
|
34
|
+
|
35
|
+
case when count(b.id) < 3 then null else sum(b.sale) end as 'sum'
|
36
|
+
|
37
|
+
from test as a inner join test as b
|
38
|
+
|
39
|
+
on (b.id >= a.id - 2 and b.id <= a.id)
|
40
|
+
|
41
|
+
group by a.id
|
42
|
+
|
43
|
+
```
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
実行結果は以下のとおりです。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
(テーブル名はtestとしています。
|
52
|
+
|
53
|
+
フィールド名dateは予約語の可能性があるのでdtに変更しています。)
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
id sale date sum
|
60
|
+
|
61
|
+
1 1200 2020-11-11 NULL
|
62
|
+
|
63
|
+
2 3500 2020-11-12 NULL
|
64
|
+
|
65
|
+
3 400 2020-11-13 5100
|
66
|
+
|
67
|
+
4 5000 2020-11-14 8900
|
68
|
+
|
69
|
+
5 4000 2020-11-15 9400
|
70
|
+
|
71
|
+
6 15000 2020-11-16 24000
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
```
|