回答編集履歴

4

回答を追記

2017/02/07 06:10

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
@@ -81,3 +81,117 @@
81
81
 
82
82
 
83
83
  ただし、テーブル定義等を提示いただいていないため、動作確認等は一切しておりません。
84
+
85
+
86
+
87
+ # 追記および修正
88
+
89
+ > マスターとなるテーブルはなく1つのテーブルのみになります。
90
+
91
+
92
+
93
+ では、どのようにしてユーザを管理しているのですか?
94
+
95
+ カラム名は異なるとしても、'aaa1'や'ccc3'などの値をプライマリキーとして保持しているテーブルがあるはずです。
96
+
97
+ そのテーブル名を指定してください。
98
+
99
+
100
+
101
+ 以下、`master`という名称のユーザーのマスターテーブルが存在する前提の回答を提示させていただきます。
102
+
103
+ ```sql
104
+
105
+ SELECT
106
+
107
+ r.id,
108
+
109
+ CASE r.id_class WHEN 1 THEN 'ジョブ1' ELSE 'ノーマル' END AS `クラス`,
110
+
111
+ IFNULL(tmp_201611.count, 0) AS `201611`,
112
+
113
+ IFNULL(tmp_201612.count, 0) AS `201612`,
114
+
115
+ IFNULL(tmp_201701.count, 0) AS `201701`
116
+
117
+ FROM master AS r
118
+
119
+ LEFT OUTER JOIN (
120
+
121
+ SELECT id, COUNT(*) AS count
122
+
123
+ FROM test_rest
124
+
125
+ WHERE id IS NOT NULL
126
+
127
+ AND up_date >= '2016-11-01 00:00:00'
128
+
129
+ AND up_date < '2016-12-01 00:00:00'
130
+
131
+ GROUP BY id
132
+
133
+ ) AS tmp_201611
134
+
135
+ ON r.id = tmp_201611.id
136
+
137
+ LEFT OUTER JOIN (
138
+
139
+ SELECT id, COUNT(*) AS count
140
+
141
+ FROM test_rest
142
+
143
+ WHERE id IS NOT NULL
144
+
145
+ AND up_date >= '2016-12-01 00:00:00'
146
+
147
+ AND up_date < '2017-01-01 00:00:00'
148
+
149
+ GROUP BY id
150
+
151
+ ) AS tmp_201612
152
+
153
+ ON r.id = tmp_201612.id
154
+
155
+ LEFT OUTER JOIN (
156
+
157
+ SELECT id, COUNT(*) AS count
158
+
159
+ FROM test_rest
160
+
161
+ WHERE id IS NOT NULL
162
+
163
+ AND up_date >= '2017-01-01 00:00:00'
164
+
165
+ AND up_date < '2017-02-01 00:00:00'
166
+
167
+ GROUP BY id
168
+
169
+ ) AS tmp_201701
170
+
171
+ ON r.id = tmp_201701.id
172
+
173
+ WHERE tmp_201611.count >= 3
174
+
175
+ OR tmp_201612.count >= 3
176
+
177
+ OR tmp_201701.count >= 3;
178
+
179
+ ```
180
+
181
+ > 試しに叩いてみたのですが、3件以下も検出されました
182
+
183
+
184
+
185
+ とのことですが、SQLFiddle の実行結果の通り、意図通りの結果が得られるはずです。
186
+
187
+ [http://sqlfiddle.com/#!9/efd896/1](http://sqlfiddle.com/#!9/efd896/1)
188
+
189
+
190
+
191
+ もし、本当に
192
+
193
+ > マスターとなるテーブルはなく1つのテーブルのみ
194
+
195
+
196
+
197
+ であれば、これ以上のことは私には分かりません。

3

回答を追記

2017/02/07 06:10

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
File without changes

2

補足を追記

2017/02/07 06:09

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
@@ -76,4 +76,8 @@
76
76
 
77
77
  ```
78
78
 
79
+ SQL中の`【id, id_class のマスターとなるテーブル】 `部分には、ユーザのマスターとなるテーブル(`id`および`id_class`カラムが定義されているもの)を指定してください。
80
+
81
+
82
+
79
83
  ただし、テーブル定義等を提示いただいていないため、動作確認等は一切しておりません。

1

回答を修正

2017/02/07 03:55

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  IFNULL(tmp_201701.count, 0) AS `201701`
14
14
 
15
- FROM test_rest AS r
15
+ FROM 【id, id_class のマスターとなるテーブル】 AS r
16
16
 
17
17
  LEFT OUTER JOIN (
18
18