题目链接:点击打开链接
题目大意:略。
解题思路
1、最近第二次:指的是倒数第二大的日期
2、解决方案(1):在一个用户有多个活动的情况下先把最大的日期的给过滤掉,这样只要统一二次筛选最大值即可
3、解决方案(2):通过动态 WHERE 去筛选
AC 代码
--解决方案(1) selectu.*fromUserActivityuwhere (u.username, u.startDate) in( selecta.username, max(a.startDate) fromUserActivityawhere (a.username, a.startDate) notin ( selectb.username, max(b.startDate) fromUserActivitybgroupbyb.usernamehavingcount(b.username) >1 ) groupbya.username) --解决方案(2) WITHt1AS(SELECT*, ROW_NUMBER() OVER(PARTITIONBYusernameORDERBYendDateDESC) rwFROMUserActivity) SELECTusername, activity, startDate, endDateFROMt1t1_1WHEREIF((SELECTrwFROMt1t1_2WHERErw=2ANDusername=t1_1.username) ISNULL, rw=1, rw=2)