我是SQL的学生和初学者
我有一个表,其中包含列:ID_USER, DATE
和PAYMENT_DUMMY
,其中包含有关每个月用户付款的信息( 1-已付款,0-未付款)
我需要创建另一个虚拟变量,该变量将标识在第一个月,第一个月和第二个月没有付款,但在其余月份付款的用户(在屏幕截图中,这些用户是1225964和1249528 )。
有人可以帮我吗?
答案 0 :(得分:0)
也许在这种情况下,内部查询会分配行号,而外部查询会计算出前两个月中有多少未支付
drop table if exists t;
create table t(id int, dt date, dummy int);
insert into t values
(1,'2018-01-31',1),(1,'2018-02-28',1),(1,'2018-03-31',1),
(2,'2018-01-31',0),(2,'2018-02-28',0),(2,'2018-03-31',1),
(3,'2018-01-31',1),(3,'2018-02-28',0),(3,'2018-03-31',1),
(4,'2018-01-31',0),(4,'2018-02-28',0),(4,'2018-03-31',0);
select s.id,sum(dummy) cnt
from
(
select t.*,
if (t.id <> @p,@r:=1,@r:=@r+1) r,
@p:=t.id p
from t
cross join (select @r:=0,@p:=0) rn
order by t.id,t.dt
) s
where s.r <= 2
group by s.id having cnt = 0;
+------+------+
| id | cnt |
+------+------+
| 2 | 0 |
| 4 | 0 |
+------+------+
2 rows in set (0.00 sec)