回答編集履歴

2

修正

2017/12/14 02:25

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -30,13 +30,15 @@
30
30
 
31
31
  # 追記
32
32
 
33
+ ※以下修正します。1ではなく1以上でした
34
+
33
35
 
34
36
 
35
37
  質問者さんから提示された追加仕様を元に、判断基準を4つ用意しました
36
38
 
37
- (1)1日前でhoge=1のデータが最低1つ必要
39
+ (1)1日前でhoge>=1のデータが最低1つ必要
38
40
 
39
- (2)1日前でhoge=1以外のデータは存在してはいけない
41
+ (2)1日前でhoge<1のデータは存在してはいけない
40
42
 
41
43
  (3)2~4日前でhoge=0のデータが最低1つ必要
42
44
 
@@ -98,9 +100,9 @@
98
100
 
99
101
  select user_id
100
102
 
101
- ,sum((rp_date=curdate()-interval 1 day)*(hoge=1)) as j1
103
+ ,sum((rp_date=curdate()-interval 1 day)*(hoge>=1)) as j1
102
104
 
103
- ,sum((rp_date=curdate()-interval 1 day)*(hoge!=1)) as j2
105
+ ,sum((rp_date=curdate()-interval 1 day)*(hoge<1)) as j2
104
106
 
105
107
  ,sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge=0)) as j3
106
108
 
@@ -122,9 +124,9 @@
122
124
 
123
125
  group by user_id
124
126
 
125
- having sum((rp_date=curdate()-interval 1 day)*(hoge=1))>0
127
+ having sum((rp_date=curdate()-interval 1 day)*(hoge>=1))>0
126
128
 
127
- and sum((rp_date=curdate()-interval 1 day)*(hoge!=1))=0
129
+ and sum((rp_date=curdate()-interval 1 day)*(hoge<1))=0
128
130
 
129
131
  and sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge=0))>0
130
132
 

1

追記

2017/12/14 02:25

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -25,3 +25,113 @@
25
25
 
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ # 追記
32
+
33
+
34
+
35
+ 質問者さんから提示された追加仕様を元に、判断基準を4つ用意しました
36
+
37
+ (1)1日前でhoge=1のデータが最低1つ必要
38
+
39
+ (2)1日前でhoge=1以外のデータは存在してはいけない
40
+
41
+ (3)2~4日前でhoge=0のデータが最低1つ必要
42
+
43
+ (4)2~4日前でhoge=0以外のデータは存在してはいけない
44
+
45
+
46
+
47
+ その上で本日を'2017-12-14'として計算します
48
+
49
+
50
+
51
+ ```SQL
52
+
53
+ create table user_data (id int primary key,rp_date date,user_id int,hoge int);
54
+
55
+ insert into user_data values
56
+
57
+ (1,'2017-12-13',1,0),
58
+
59
+ (2,'2017-12-13',1,1),
60
+
61
+ (3,'2017-12-13',2,1),
62
+
63
+ (4,'2017-12-12',2,0),
64
+
65
+ (5,'2017-12-12',2,0),
66
+
67
+ (6,'2017-12-12',2,1),
68
+
69
+ (7,'2017-12-13',3,1),
70
+
71
+ (8,'2017-12-13',3,1),
72
+
73
+ (9,'2017-12-12',3,0),
74
+
75
+ (10,'2017-12-12',3,0),
76
+
77
+ (11,'2017-12-12',3,0),
78
+
79
+ (12,'2017-12-11',3,0),
80
+
81
+ (13,'2017-12-10',3,0);
82
+
83
+ ```
84
+
85
+
86
+
87
+ - user_id=1は条件2と条件3違反
88
+
89
+ - user_id=2は条件4違反
90
+
91
+ - user_id=3は全ての条件をクリア
92
+
93
+
94
+
95
+ 具体的にはこう
96
+
97
+ ```SQL
98
+
99
+ select user_id
100
+
101
+ ,sum((rp_date=curdate()-interval 1 day)*(hoge=1)) as j1
102
+
103
+ ,sum((rp_date=curdate()-interval 1 day)*(hoge!=1)) as j2
104
+
105
+ ,sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge=0)) as j3
106
+
107
+ ,sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge!=0)) as j4
108
+
109
+ from user_data
110
+
111
+ group by user_id
112
+
113
+ ```
114
+
115
+ これを元にuser_idのみ抽出するのでhavingでまとめます
116
+
117
+ ```SQL
118
+
119
+ select user_id
120
+
121
+ from user_data
122
+
123
+ group by user_id
124
+
125
+ having sum((rp_date=curdate()-interval 1 day)*(hoge=1))>0
126
+
127
+ and sum((rp_date=curdate()-interval 1 day)*(hoge!=1))=0
128
+
129
+ and sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge=0))>0
130
+
131
+ and sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge!=0))=0;
132
+
133
+ ```
134
+
135
+
136
+
137
+ 上記本日が'2017-12-14'でない場合は「curdate()」の部分を「'2017-12-14'」に書き換えてください