SQL面试题更新 2026-08-05

请编写一条 SQL 语句,从访问记录表中查询出每个页面的最新访问日期(仅返回页面及其最近一次访问日期)。

编码实现技术原理SQL

考察说明

考察对 SQL 分组聚合与最大值统计的掌握,以及使用窗口函数或子查询的优化能力。

回答思路

  1. 【回答框架 1】定义需求:按页面分组,取每组中访问日期最大的记录。核心思路是对页面字段进行分组,对日期字段取最大值。分组可用 GROUP BY,最大值可用 MAX 函数。
  2. 【回答框架 2】给出最简方案:SELECT page, MAX(access_date) FROM access_log GROUP BY page;其中 page 为页面标识,access_date 为访问日期字段。该方法直接返回每个页面的最近访问日期,但若需要同时返回该日期对应的完整记录,则需要额外处理。
  3. 【回答框架 3】若需返回完整记录,可先查出每组最大日期,再与原表连接:SELECT * FROM access_log t JOIN (SELECT page, MAX(access_date) AS max_date FROM access_log GROUP BY page) sub ON t.page = sub.page AND t.access_date = sub.max_date;此方法可获取该日期下的所有访问记录。
  4. 【回答框架 4】也可使用窗口函数 ROW_NUMBER() 按页面分区按日期降序编号,取编号为 1 的记录;该方法更直观且可扩展,但需注意数据库版本对窗口函数的支持。
  5. 【关键点 1】GROUP BY 与 MAX 组合可准确得到每个页面的最近访问日期。
  6. 【关键点 2】若需完整记录,使用子查询或窗口函数避免丢失其他列。
  7. 【关键点 3】日期字段需确保为日期或时间戳类型,否则排序和比较可能出错。
  8. 【易错点 1】忽略日期字段可能包含时间部分,导致同日多次访问被重复统计,需明确需求。
  9. 【易错点 2】直接 SELECT * 与 GROUP BY 混用可能在某些数据库下报错或返回不确定记录,应避免。
  10. 【易错点 3】窗口函数在大数据集上性能可能较低,需根据数据量和索引优化。