前日の hoge が1以上で
2日前から4日前の hoge が 0のときのデータ
前日の hoge が1以上「か」
2日前から4日前の hoge が 0のときのデータ
でよろしいでしょうか?
SQL
1select * from user_data where 0
2or (rp_date = curdate() - interval 1 day and hoge=1)
3or (rp_date between curdate() - interval 4 day and curdate() - interval 2 day
4and hoge=0) ;
5
追記
※以下修正します。1ではなく1以上でした
質問者さんから提示された追加仕様を元に、判断基準を4つ用意しました
(1)1日前でhoge>=1のデータが最低1つ必要
(2)1日前でhoge<1のデータは存在してはいけない
(3)24日前でhoge=0のデータが最低1つ必要
(4)24日前でhoge=0以外のデータは存在してはいけない
その上で本日を'2017-12-14'として計算します
SQL
1create table user_data (id int primary key,rp_date date,user_id int,hoge int);
2insert into user_data values
3(1,'2017-12-13',1,0),
4(2,'2017-12-13',1,1),
5(3,'2017-12-13',2,1),
6(4,'2017-12-12',2,0),
7(5,'2017-12-12',2,0),
8(6,'2017-12-12',2,1),
9(7,'2017-12-13',3,1),
10(8,'2017-12-13',3,1),
11(9,'2017-12-12',3,0),
12(10,'2017-12-12',3,0),
13(11,'2017-12-12',3,0),
14(12,'2017-12-11',3,0),
15(13,'2017-12-10',3,0);
- user_id=1は条件2と条件3違反
- user_id=2は条件4違反
- user_id=3は全ての条件をクリア
具体的にはこう
SQL
1select user_id
2,sum((rp_date=curdate()-interval 1 day)*(hoge>=1)) as j1
3,sum((rp_date=curdate()-interval 1 day)*(hoge<1)) as j2
4,sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge=0)) as j3
5,sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge!=0)) as j4
6from user_data
7group by user_id
これを元にuser_idのみ抽出するのでhavingでまとめます
SQL
1select user_id
2from user_data
3group by user_id
4having sum((rp_date=curdate()-interval 1 day)*(hoge>=1))>0
5and sum((rp_date=curdate()-interval 1 day)*(hoge<1))=0
6and sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge=0))>0
7and sum((rp_date between curdate()-interval 4 day and curdate()-interval 2 day)*(hoge!=0))=0;
上記本日が'2017-12-14'でない場合は「curdate()」の部分を「'2017-12-14'」に書き換えてください
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/14 01:09
2017/12/14 05:11
2017/12/14 05:16