SQL count consecutive days

前端 未结 2 1941
孤独总比滥情好
孤独总比滥情好 2020-12-08 05:55

This is the SQL database data:

UserTable

UserName    | UserDate      | UserCode
-------------------------------------------
user1       | 08-31-2014    | 23         


        
2条回答
  •  执念已碎
    2020-12-08 06:30

    Please try:

    ;with T1 as(
        select 
            *, 
            ROW_NUMBER() over (  order by UserName, UserDate) ID 
        from tbl
    )
    ,T as (
        SELECT *, 1 CNT FROM T1 where ID=1
        union all
        SELECT b.*, (case when T.UserDate+1=b.UserDate and 
                               T.UserName=b.UserName then t.CNT 
                            else T.CNT+1 end)
        from T1 b INNER JOIN T on b.ID=T.ID+1
    )
    select distinct UserName, MIN(UserDate), max(UserDate)
    ,sum(case UserCode when 0 then 0 else 1 end) From T group by UserName, CNT
    having COUNT(*)>1
    

    SQL Fiddle Demo

提交回复
热议问题