题85:
根据下表写一条SQL查询展示每一位用户最近第二次的活动,如果用户仅有一次活动,返回该活动。
其中:该表不包含主键,该表包含每个用户在一段时间内进行的活动的信息,名为 username 的用户在 startDate 到 endDate 日内有一次活动。
解题思路:用两个窗口函数,计算第二个活动,如果只有一个也输出case即可。
select u.username,u.activity,u.startDate,u.endDate
from(
select *,
rank() over (partition by username order by startDate desc) as rank1,
count(*) over (partition by username) as count1
from UserActivity
) as u
where rank1 = 2 or count1 = 1;