with
 fdate_rnk as (
    select fdate,user_id,row_number()over(partition by user_id order by fdate) rnk
from tb_dau
where fdate between '2023-01-01' and '2023-01-31')
,fdate_sub as (
    select fdate,user_id,date_sub(fdate,interval rnk day) sub
from fdate_rnk)
,grouped_sub as (select user_id,sub,count(*) cnt
from fdate_sub
group by user_id,sub)
select user_id,max(cnt) max_consec_days
from grouped_sub
group by user_id