SQL面试题更新 2026-08-05

请用开窗函数编写一条 SQL 查询,得到每个用户最近一次访问的页面路径与该次访问的日期。

编码实现技术原理SQL

考察说明

考查对开窗函数(尤其是 ROW_NUMBER)在分组取最新记录场景中的运用能力。

回答思路

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