select sum(flag)/count(*) avg_ret from ( select *, if( date_add( lead(date,1) over(partition by device_id order by date), interval -1 day ) = date, 1, 0 ) flag from ( select distinct device_id,date from question_practice_detail ) q1 ) q2;