描述
某产品在2022年2月6-9日用户登录信息表及用户信息和评分信息交叉表如下,
用户登录信息表login_tb(log_id-登录动作id,user_id-用户id, log_time-登录时间),如下所示:
log_id | user_id | log_time |
---|---|---|
101 | 101 | 2022-02-06 07:24:00 |
102 | 102 | 2022-02-06 07:24:00 |
103 | 103 | 2022-02-06 09:36:00 |
104 | 102 | 2022-02-07 09:37:00 |
105 | 103 | 2022-02-07 12:01:00 |
106 | 101 | 2022-02-07 12:23:00 |
107 | 102 | 2022-02-08 08:37:00 |
108 | 103 | 2022-02-09 10:43:00 |
109 | 101 | 2022-02-09 14:56:00 |
用户信息及评分信息交叉表user_action_tb(user_id-用户id,hobby-喜好标签, score-评分),如下所示:
注:该表存储用户id及用户个人喜好内容标签,以及对平台推荐内容的评分信息
user_id | hobby | score |
---|---|---|
101 | 健身 | 88 |
102 | 影视 | 81 |
103 | 美妆 | 78 |
104 | 健身 | 68 |
105 | 体育 | 90 |
106 | 影视 | 56 |
107 | 体育 | 89 |
108 | 影视 | 77 |
问题:请查询每天登陆最早的用户的内容喜好?
注:如果当天出现多个用户同时最早登录,那么这些用户均需要输出
输出日期、用户id、用户内容喜好,结果按照日期升序排序
示例输出如下:
log_day | user_id | hobby |
---|---|---|
2022-02-06 | 101 | 健身 |
2022-02-06 | 102 | 影视 |
2022-02-07 | 102 | 影视 |
2022-02-08 | 102 | 影视 |
2022-02-09 | 103 | 美妆 |
解释:2022年2月6日用户101和102均在7:24登录,故在当天最早登录的用户是101和102,他们内容喜好标签分别是健身、影视。
其他结果同理
示例1
输入:
drop table if exists `login_tb` ;
CREATE TABLE `login_tb` (
`log_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`log_time` datetime NOT NULL,
PRIMARY KEY (`log_id`));
INSERT INTO login_tb VALUES(101,101,'2022-02-06 07:24:00');
INSERT INTO login_tb VALUES(102,102,'2022-02-06 07:24:00');
INSERT INTO login_tb VALUES(103,103,'2022-02-06 09:36:00');
INSERT INTO login_tb VALUES(104,102,'2022-02-07 09:37:00');
INSERT INTO login_tb VALUES(105,103,'2022-02-07 12:01:00');
INSERT INTO login_tb VALUES(106,101,'2022-02-07 12:23:00');
INSERT INTO login_tb VALUES(107,102,'2022-02-08 08:37:00');
INSERT INTO login_tb VALUES(108,103,'2022-02-09 10:43:00');
INSERT INTO login_tb VALUES(109,101,'2022-02-09 14:56:00');
drop table if exists `user_action_tb` ;
CREATE TABLE `user_action_tb` (
`user_id` int(11) NOT NULL,
`hobby` varchar(8) NOT NULL,
`score` int(11) NOT NULL,
PRIMARY KEY (`user_id`));
INSERT INTO user_action_tb VALUES(101,'健身',88);
INSERT INTO user_action_tb VALUES(102,'影视',81);
INSERT INTO user_action_tb VALUES(103,'美妆',78);
INSERT INTO user_action_tb VALUES(104,'健身',68);
INSERT INTO user_action_tb VALUES(105,'体育',90);
INSERT INTO user_action_tb VALUES(106,'影视',56);
INSERT INTO user_action_tb VALUES(107,'体育',89);
INSERT INTO user_action_tb VALUES(108,'影视',77);
输出:
log_day|user_id|hobby
2022-02-06|101|健身
2022-02-06|102|影视
2022-02-07|102|影视
2022-02-08|102|影视
2022-02-09|103|美妆
答案
解法1:
select
l.log_day,
u.user_id,
u.hobby
from
(
select
*,
date (a.log_time) log_day
from
login_tb a
where
a.log_time = (
select
min(b.log_time)
from
login_tb b
where
date (a.log_time) = date (b.log_time)
)
) l
left join user_action_tb u on l.user_id = u.user_id
order by
log_day;
*本案例来自牛客网,但答案为原创,如有雷同纯属巧合*