回答編集履歴

3

typo

2017/07/10 08:08

投稿

yambejp
yambejp

スコア114845

test CHANGED
@@ -94,7 +94,7 @@
94
94
 
95
95
  case
96
96
 
97
- when (select (select @d:=date_format(d,'%e') as dummy)) between 1 and 7 then '1週目'
97
+ when (select @d:=date_format(d,'%e') as dummy) between 1 and 7 then '1週目'
98
98
 
99
99
  when @d between 8 and 15 then '2週目'
100
100
 

2

訂正

2017/07/10 08:08

投稿

yambejp
yambejp

スコア114845

test CHANGED
@@ -81,3 +81,43 @@
81
81
 
82
82
 
83
83
  ```
84
+
85
+
86
+
87
+ # 一部題意にあわせて修正
88
+
89
+ 一部推奨されない表現が含まれていますが、たぶんこれで大丈夫です
90
+
91
+ ```SQL
92
+
93
+ select
94
+
95
+ case
96
+
97
+ when (select (select @d:=date_format(d,'%e') as dummy)) between 1 and 7 then '1週目'
98
+
99
+ when @d between 8 and 15 then '2週目'
100
+
101
+ when @d between 15 and 21 then '3週目'
102
+
103
+ when @d between 22 and 28 then '4週目'
104
+
105
+ else '5週目'
106
+
107
+ end as d2
108
+
109
+ ,d
110
+
111
+ ,sum(tenpo)
112
+
113
+ ,sum(tuhan)
114
+
115
+ from tbl
116
+
117
+ where d between '2017-07-01' and '2017-07-31'
118
+
119
+ group by d2 asc,d asc with rollup
120
+
121
+
122
+
123
+ ```

1

追記

2017/07/10 08:00

投稿

yambejp
yambejp

スコア114845

test CHANGED
@@ -7,3 +7,77 @@
7
7
  - 7/18はデータ0,0ですがこの場合もデータは存在するのでしょうか?
8
8
 
9
9
  それともデータはないけど7/18のカレンダーを元に0,0を表示するのでしょうか?
10
+
11
+
12
+
13
+ # sample
14
+
15
+
16
+
17
+ ```SQL
18
+
19
+ create table tbl(d date unique,tenpo int,tuhan int);
20
+
21
+ insert into tbl value
22
+
23
+ ('2017-07-01',120800,109000),
24
+
25
+ ('2017-07-02',95896,371140),
26
+
27
+ ('2017-07-03',44200,24000),
28
+
29
+ ('2017-07-04',51600,14000),
30
+
31
+ ('2017-07-05',77634,0),
32
+
33
+ ('2017-07-06',87000,18303),
34
+
35
+ ('2017-07-07',159240,25300),
36
+
37
+ ('2017-07-08',0,74000),
38
+
39
+ ('2017-07-09',0,79705);
40
+
41
+ ```
42
+
43
+ 集計単位は日付から1引いた数を7で割ったあまりを日付から引いた日
44
+
45
+
46
+
47
+ ```SQL
48
+
49
+ select d
50
+
51
+ ,d - interval (date_format(d,'%e')-1)%7 day as d2
52
+
53
+ ,sum(tenpo)
54
+
55
+ ,sum(tuhan)
56
+
57
+ from tbl
58
+
59
+ group by d
60
+
61
+ ```
62
+
63
+
64
+
65
+ よってこれを利用して集計するとこう
66
+
67
+ ```ここに言語を入力
68
+
69
+ select d
70
+
71
+ ,sum(tenpo)
72
+
73
+ ,sum(tuhan)
74
+
75
+ from tbl
76
+
77
+ group by d - interval (date_format(d,'%e')-1)%7 day
78
+
79
+ ,d with rollup
80
+
81
+
82
+
83
+ ```