-- 查询每天最早登录的用户及其内容喜好
SELECT
DATE(log_time) AS log_day, -- 登录日期(提取日期部分)
lt.user_id, -- 用户ID
hobby -- 用户内容喜好
FROM login_tb lt
-- 关联用户信息表,获取喜好标签
JOIN user_action_tb ut ON lt.user_id = ut.user_id
-- 筛选条件:登录时间是当天最早的登录时间
-- 子查询作用:获取每天的最早登录时间(可能有多个用户在该时间登录)
WHERE log_time IN (
SELECT MIN(log_time) -- 每天的最早登录时间
FROM login_tb
GROUP BY DATE(log_time) -- 按日期分组,计算每天的最早时间
)
-- 按日期升序排序
ORDER BY log_day;
-- 查询每天最早登录的用户及其内容喜好
SELECT
log_day, -- 登录日期
u.user_id, -- 用户ID
hobby -- 用户内容喜好
FROM user_action_tb u
-- 关联子查询:获取每个用户的登录日期及登录时间排名
JOIN (
SELECT
user_id,
DATE(log_time) AS log_day, -- 登录日期
-- 窗口函数:按日期分组,对登录时间排序,最早的标记为1
DENSE_RANK() OVER(
PARTITION BY DATE(log_time) -- 按日期分组
ORDER BY log_time -- 按登录时间升序(最早的排第1)
) AS log_time_rank
FROM login_tb
) t ON u.user_id = t.user_id
AND t.log_time_rank = 1 -- 筛选排名为1的用户(当天最早登录)
-- 按日期升序排序
ORDER BY log_day;