with ch as (
    select *
    from checkin_tb
    where date_format(checkin_time,'%Y-%m-%d')>='2022-06-12'
)
select a.user_id,g.room_id,g.room_type,a.t as days
from (select *,DATEDIFF(date(checkout_time), date(checkin_time)) as t
from ch) a left join guestroom_tb g on a.room_id=g.room_id
where a.t>=2
order by a.t asc, g.room_id asc, a.user_id desc

这题思路其实不难,先用cte清洗出2022-06-12后的入住信息数据 ch,

内层子查询就是在TIMESTAMPDIFFch旁边加一个辅助列,计算checkin_time和checkout_time的天数差值, 这里只能用DATEDIFF,而不能用TIMESTAMPDIFF。

然后就是用这个子查询里面挑选出来需要的列,然后联接另一个表挑选出需要的列。 where里面的条件是天数差值>=2

这题和那种连续登陆多少天的不一样。