校招算法笔面试 | SQL笔试面试编程题-每天登陆最早的用户的内容喜好

题目

题目链接

这道题目要求我们查询每天最早登录的用户及其内容喜好。我们要做的事情如下:

1. 确定总体问题

我们需要找出每一天最早登录的用户,并输出他们的登录日期、用户ID和内容喜好,并按日期升序排序,如果当天出现多个用户同时最早登录,那么这些用户均需要输出。

2. 分析关键问题
  • 找出每天最早的登录时间:从login_tb中提取每一天的最早登录时间。
  • 获取最早登录用户的信息:根据最早登录时间找到对应的用户。
  • 连接用户信息:将最早登录的用户与user_action_tb表连接,以便获取用户的内容喜好。
  • 排序输出:按登录日期升序排序。
3. 解决每个关键问题的代码及讲解
步骤1:找出每天最早的登录时间

我们使用WITH子句创建一个临时表earliest_logins,找出每一天的最早登录时间:

WITH earliest_logins AS (
    SELECT 
        DATE(log_time) AS log_day,
        MIN(log_time) AS earliest_time
    FROM 
        login_tb
    GROUP BY 
        DATE(log_time)
)
  • DATE(log_time) AS log_day:提取登录日期。
  • MIN(log_time) AS earliest_time:找出每一天(同一组)的最早登录时间。
  • GROUP BY DATE(log_time):按日期分组。
步骤2:获取最早登录用户的信息

我们将earliest_loginslogin_tb表连接,获取最早登录用户的信息:

SELECT 
    e.log_day,
    u.user_id,
    u.hobby
FROM 
    earliest_logins e
JOIN 
    login_tb l ON l.log_time = e.earliest_time
  • login_tb l ON l.log_time = e.earliest_time:通过最早登录时间连接,获取最早登录的用户。
步骤3:连接用户信息

我们将最早登录的用户与user_action_tb表连接,以便获取用户的内容喜好:

JOIN
    user_action_tb u ON u.user_id = l.user_id
  • JOIN user_action_tb u ON u.user_id = l.user_id:通过用户ID连接,获取用户的内容喜好。
步骤4:排序输出

我们使用ORDER BY按登录日期升序排序输出结果:

ORDER BY 
    e.log_day;

完整代码

WITH earliest_logins AS (
    SELECT 
        DATE(log_time) AS log_day,
        MIN(log_time) AS earliest_time
    FROM 
        login_tb
    GROUP BY 
        DATE(log_time)
)

SELECT 
    e.log_day,
    u.user_id,
    u.hobby
FROM 
    earliest_logins e
JOIN 
    login_tb l ON l.log_time = e.earliest_time
JOIN
    user_action_tb u ON u.user_id = l.user_id
ORDER BY 
    e.log_day;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值