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

回答編集履歴

4

回答を追記

2017/02/07 06:10

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -39,4 +39,61 @@
39
39
  ```
40
40
  SQL中の`【id, id_class のマスターとなるテーブル】 `部分には、ユーザのマスターとなるテーブル(`id`および`id_class`カラムが定義されているもの)を指定してください。
41
41
 
42
- ただし、テーブル定義等を提示いただいていないため、動作確認等は一切しておりません。
42
+ ただし、テーブル定義等を提示いただいていないため、動作確認等は一切しておりません。
43
+
44
+ # 追記および修正
45
+ > マスターとなるテーブルはなく1つのテーブルのみになります。
46
+
47
+ では、どのようにしてユーザを管理しているのですか?
48
+ カラム名は異なるとしても、'aaa1'や'ccc3'などの値をプライマリキーとして保持しているテーブルがあるはずです。
49
+ そのテーブル名を指定してください。
50
+
51
+ 以下、`master`という名称のユーザーのマスターテーブルが存在する前提の回答を提示させていただきます。
52
+ ```sql
53
+ SELECT
54
+ r.id,
55
+ CASE r.id_class WHEN 1 THEN 'ジョブ1' ELSE 'ノーマル' END AS `クラス`,
56
+ IFNULL(tmp_201611.count, 0) AS `201611`,
57
+ IFNULL(tmp_201612.count, 0) AS `201612`,
58
+ IFNULL(tmp_201701.count, 0) AS `201701`
59
+ FROM master AS r
60
+ LEFT OUTER JOIN (
61
+ SELECT id, COUNT(*) AS count
62
+ FROM test_rest
63
+ WHERE id IS NOT NULL
64
+ AND up_date >= '2016-11-01 00:00:00'
65
+ AND up_date < '2016-12-01 00:00:00'
66
+ GROUP BY id
67
+ ) AS tmp_201611
68
+ ON r.id = tmp_201611.id
69
+ LEFT OUTER JOIN (
70
+ SELECT id, COUNT(*) AS count
71
+ FROM test_rest
72
+ WHERE id IS NOT NULL
73
+ AND up_date >= '2016-12-01 00:00:00'
74
+ AND up_date < '2017-01-01 00:00:00'
75
+ GROUP BY id
76
+ ) AS tmp_201612
77
+ ON r.id = tmp_201612.id
78
+ LEFT OUTER JOIN (
79
+ SELECT id, COUNT(*) AS count
80
+ FROM test_rest
81
+ WHERE id IS NOT NULL
82
+ AND up_date >= '2017-01-01 00:00:00'
83
+ AND up_date < '2017-02-01 00:00:00'
84
+ GROUP BY id
85
+ ) AS tmp_201701
86
+ ON r.id = tmp_201701.id
87
+ WHERE tmp_201611.count >= 3
88
+ OR tmp_201612.count >= 3
89
+ OR tmp_201701.count >= 3;
90
+ ```
91
+ > 試しに叩いてみたのですが、3件以下も検出されました
92
+
93
+ とのことですが、SQLFiddle の実行結果の通り、意図通りの結果が得られるはずです。
94
+ [http://sqlfiddle.com/#!9/efd896/1](http://sqlfiddle.com/#!9/efd896/1)
95
+
96
+ もし、本当に
97
+ > マスターとなるテーブルはなく1つのテーブルのみ
98
+
99
+ であれば、これ以上のことは私には分かりません。

3

回答を追記

2017/02/07 06:10

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
File without changes

2

補足を追記

2017/02/07 06:09

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -37,4 +37,6 @@
37
37
  OR tmp_201612.count >= 3
38
38
  OR tmp_201701.count >= 3;
39
39
  ```
40
+ SQL中の`【id, id_class のマスターとなるテーブル】 `部分には、ユーザのマスターとなるテーブル(`id`および`id_class`カラムが定義されているもの)を指定してください。
41
+
40
42
  ただし、テーブル定義等を提示いただいていないため、動作確認等は一切しておりません。

1

回答を修正

2017/02/07 03:55

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  IFNULL(tmp_201611.count, 0) AS `201611`,
6
6
  IFNULL(tmp_201612.count, 0) AS `201612`,
7
7
  IFNULL(tmp_201701.count, 0) AS `201701`
8
- FROM test_rest AS r
8
+ FROM 【id, id_class のマスターとなるテーブル】 AS r
9
9
  LEFT OUTER JOIN (
10
10
  SELECT id, COUNT(*) AS count
11
11
  FROM test_rest