在a表中有id和date两列,记录用户当天是否签到,想查询出哪些用户连续签到了3天(或连续签到更多天,是连续签到),sql改如何写呢?

首先
用row_number来统计排名
select id,date,row_number() over(partition by id order by date) as rank
结果
然后
用date-rank作为一个新的字段,再count不同的date-rank作为cnt,并且group by id,(date-rank),得到如下结果:
后面的那个cnt就是代表这个id连续的次数
来源:oschina
链接:https://my.oschina.net/u/2000675/blog/4297834