请用开窗函数编写一条 SQL 查询,得到每个用户最近一次访问的页面路径与该次访问的日期。
考察说明
考查对开窗函数(尤其是 ROW_NUMBER)在分组取最新记录场景中的运用能力。
回答思路
- 【回答框架 1】开窗函数用于在结果集内按指定分区和排序生成序号,而不改变行数。本题可选用 ROW_NUMBER() OVER (PARTITION BY 用户列 ORDER BY 访问日期 DESC) 为每个用户的访问记录按日期倒序编号。
- 【回答框架 2】将上述开窗查询作为子查询或使用 CTE,外层筛选序号等于 1 的行,即可得到每个用户最近一次访问的页面路径和访问日期。
- 【回答框架 3】需注意访问日期字段可能存在重复或为空的情况,可补充处理方案如按访问时间戳进一步排序,或按业务需要选择去重策略。
- 【回答框架 4】最终查询应确保结果中每个用户只出现一条记录,可通过在外部层面对用户列去重或直接按序号过滤实现。
- 【关键点 1】使用 ROW_NUMBER() 配合 PARTITION BY 用户列和 ORDER BY 访问日期 DESC
- 【关键点 2】外层过滤序号为 1 的行以获取每组最新记录
- 【关键点 3】考虑日期重复或空值时的排序与筛选策略
- 【易错点 1】忘记在开窗函数中指定 PARTITION BY 导致对整个结果集排序
- 【易错点 2】直接使用 GROUP BY 无法保持最新记录对应的其他列
- 【易错点 3】日期格式不统一导致排序错误