SQL面试题更新 2026-08-05

请写出一条 SQL 查询语句,从用户表与访问记录表中找出所有在 2024 年 7 月 1 日当天有过访问行为的用户的用户名,且要求结果中每个用户名只出现一次。请说明你的查询逻辑和去重方式。

业务理解编码实现SQL

考察说明

考查候选人能否根据时间条件和去重要求,编写正确的 SQL 查询,并理解表关联与去重机制。

回答思路

  1. 【回答框架 1】确定表结构:通常涉及用户表(包含用户 ID 和用户名)以及访问记录表(包含用户 ID、访问时间等字段)。
  2. 【回答框架 2】使用 JOIN 关联两个表,关联条件为用户 ID 相等,然后在 WHERE 子句中限定访问日期为 2024-07-01。注意日期边界问题,例如访问时间可能精确到时分秒,因此需要正确处理日期范围,确保包含 7 月 1 日全天的数据。
  3. 【回答框架 3】去重:由于同一用户可能有多条访问记录,要使用 SELECT DISTINCT 或 GROUP BY 对用户名去重。若只需要用户名,也可以先对用户 ID 去重再关联,但通常 SELECT DISTINCT 更为直接。
  4. 【回答框架 4】根据实际场景,若访问记录表中已包含用户名字段,则可直接从访问记录表查询,但仍需考虑去重和时间过滤。
  5. 【关键点 1】使用 JOIN 关联用户和访问记录表,关联键为用户 ID。
  6. 【关键点 2】时间过滤条件应写成 >= '2024-07-01' AND < '2024-07-02' 以包含全天,避免忽略当天的部分时间段记录。
  7. 【关键点 3】使用 SELECT DISTINCT 对用户名去重,或使用 GROUP BY 按用户名分组。
  8. 【易错点 1】直接使用等于符号(如 date = '2024-07-01')可能因数据类型包含时间而漏掉部分记录,例如时间接近 24:00 的记录。
  9. 【易错点 2】忘记去重会导致同一用户名重复出现,不符合题目要求。
  10. 【易错点 3】若表结构不明确,应确认用户与访问记录表的关联字段,避免错误关联。