回答編集履歴

2

HAVING句の条件誤りを修正/提示のカラム名に合わせて修正/各行の解説コメントを追記

2015/07/28 15:06

投稿

kutsulog
kutsulog

スコア985

test CHANGED
@@ -12,95 +12,103 @@
12
12
 
13
13
  JOIN (
14
14
 
15
+ -- 2週間以内に5回以上来社した人を検索
16
+
15
17
  SELECT
16
18
 
17
- index
19
+ customer_id -- <- 結合キーなので省略できません
18
20
 
19
- , name
21
+ , company_id -- <- 結合キーなので省略できません
20
22
 
21
- , delete_flag
23
+ , delete_flag -- <- 結合する時にデータを絞るために使います省略できません
22
24
 
23
25
  , COUNT(*) AS CNT -- 来た回数
24
26
 
25
- , '2週間に5回以上'
27
+ , '2週間に5回以上' -- <- 検出条件を判別するための文字列です必要なければ省略してください
26
28
 
27
29
  FROM TableB
28
30
 
29
- WHERE date > date_add(current_date, interval -2 week)
31
+ WHERE date > date_add(current_date, interval -2 week) -- <- 来社日が今日の2週間前より後(2週間以内)
30
32
 
31
33
  GROUP BY
32
34
 
33
- index
35
+ customer_id -- <- 省略不可
34
36
 
35
- , name
37
+ , company_id -- <- 省略不可
36
38
 
37
- , delete_flag
39
+ , delete_flag -- <- 省略不可
38
40
 
39
- HAVING SUM(count) >= 5
41
+ HAVING SUM(count) >= 5 -- <- 来社5回以上
42
+
43
+ UNION ALL
44
+
45
+ -- 2ヶ月以内に8回以上来社した人を検索
46
+
47
+ SELECT
48
+
49
+ customer_id -- <- 結合キーなので省略できません
50
+
51
+ , company_id -- <- 結合キーなので省略できません
52
+
53
+ , delete_flag -- <- 結合する時にデータを絞るために使います省略できません
54
+
55
+ , COUNT(*) AS CNT -- 来た回数
56
+
57
+ , '2か月に8回以上' -- <- 検出条件を判別するための文字列です必要なければ省略してください
58
+
59
+ FROM TableB
60
+
61
+ WHERE date > date_add(current_date, interval -2 month) -- <- 来社日が今日の2ヶ月前より後(2ヶ月以内)
62
+
63
+ GROUP BY
64
+
65
+ customer_id -- <- 省略不可
66
+
67
+ , company_id -- <- 省略不可
68
+
69
+ , delete_flag -- <- 省略不可
70
+
71
+ HAVING COUNT(*) >= 8 -- <- 来社8回以上
40
72
 
41
73
  UNION ALL
42
74
 
43
75
  SELECT
44
76
 
45
- index
77
+ customer_id -- <- 結合キーなので省略できません
46
78
 
47
- , name
79
+ , company_id -- <- 結合キーなので省略できません
48
80
 
49
- , delete_flag
81
+ , delete_flag -- <- 結合する時にデータを絞るために使います省略できません
50
82
 
51
83
  , COUNT(*) AS CNT -- 来た回数
52
84
 
53
- , '2か月8回以上'
85
+ , '半年5回以上' -- <- 検出条件を判別するための文字列です必要なければ省略してください
54
86
 
55
87
  FROM TableB
56
88
 
57
- WHERE date > date_add(current_date, interval -2 month)
89
+ WHERE date > date_add(current_date, interval -6 month) -- <- 来社が今日の6ヶ月前より後(半年以内)
58
90
 
59
91
  GROUP BY
60
92
 
61
- index
93
+ customer_id -- <- 省略不可
62
94
 
63
- , name
95
+ , company_id -- <- 省略不可
64
96
 
65
- , delete_flag
97
+ , delete_flag -- <- 省略不可
66
98
 
67
- HAVING SUM(count) >= 8
99
+ HAVING COUNT(*) >= 5 -- <- 来社5回以上
68
100
 
69
- UNION ALL
101
+ ) B -- <- TableBとは別の集合なので実在のテーブル名を別名にはできません
70
102
 
71
- SELECT
103
+ ON A.customer_id = B.customer_id
72
104
 
73
- index
105
+ AND A.company_id = B.company_id
74
106
 
75
- , name
76
-
77
- , delete_flag
78
-
79
- , COUNT(*) AS CNT -- 来た回数
80
-
81
- , '半年に5回以上'
82
-
83
- FROM TableB
84
-
85
- WHERE date > date_add(current_date, interval -6 week)
86
-
87
- GROUP BY
88
-
89
- index
90
-
91
- , name
92
-
93
- , delete_flag
94
-
95
- HAVING SUM(count) >= 5
96
-
97
- ) B
98
-
99
- ON A.index = B.index
100
-
101
- AND A.name = B.name
107
+ AND B.company_id = [iParaCompany_id]
102
108
 
103
109
  AND B.delete_flag = false
110
+
111
+ WHERE A.delete_flag = false
104
112
 
105
113
  ORDER BY
106
114
 

1

来た数の意味を取り違えていたので修正

2015/07/28 15:06

投稿

kutsulog
kutsulog

スコア985

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  , delete_flag
22
22
 
23
- , SUM(count) AS CNT -- 来た回数
23
+ , COUNT(*) AS CNT -- 来た回数
24
24
 
25
25
  , '2週間に5回以上'
26
26
 
@@ -48,7 +48,7 @@
48
48
 
49
49
  , delete_flag
50
50
 
51
- , SUM(count) -- 来た回数
51
+ , COUNT(*) AS CNT -- 来た回数
52
52
 
53
53
  , '2か月に8回以上'
54
54
 
@@ -76,7 +76,7 @@
76
76
 
77
77
  , delete_flag
78
78
 
79
- , SUM(count) -- 来た回数
79
+ , COUNT(*) AS CNT -- 来た回数
80
80
 
81
81
  , '半年に5回以上'
82
82