题目描述
(通过次数69,622 | 提交次数97,574,通过率71.35%)
活动表Activity: +--------------+---------+ | Column Name | Type | +--------------+---------+ | player_id | int | | device_id | int | | event_date | date | | games_played | int | +--------------+---------+ 表的主键是 (player_id, event_date)。 这张表展示了一些游戏玩家在游戏平台上的行为活动。 每行数据记录了一名玩家在退出平台之前,当天使用同一台设备登录平台后打开的游戏的数目(可能是 0 个)。 写一条 SQL查询语句获取每位玩家 第一次登陆平台的日期。 查询结果的格式如下所示: Activity 表: +-----------+-----------+------------+--------------+ | player_id | device_id | event_date | games_played | +-----------+-----------+------------+--------------+ | 1 | 2 | 2016-03-01 | 5 | | 1 | 2 | 2016-05-02 | 6 | | 2 | 3 | 2017-06-25 | 1 | | 3 | 1 | 2016-03-02 | 0 | | 3 | 4 | 2018-07-03 | 5 | +-----------+-----------+------------+--------------+ Result 表: +-----------+-------------+ | player_id | first_login | +-----------+-------------+ | 1 | 2016-03-01 | | 2 | 2017-06-25 | | 3 | 2016-03-02 | +-----------+-------------+ 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/game-play-analysis-i
//测试数据 Create table If Not Exists Activity (player_id int, device_id int, event_date date, games_played int); insert into Activity (player_id, device_id, event_date, games_played) values ('1', '2', '2016-03-01', '5'); insert into Activity (player_id, device_id, event_date, games_played) values ('1', '2', '2016-05-02', '6'); insert into Activity (player_id, device_id, event_date, games_played) values ('2', '3', '2017-06-25', '1'); insert into Activity (player_id, device_id, event_date, games_played) values ('3', '1', '2016-03-02', '0'); insert into Activity (player_id, device_id, event_date, games_played) values ('3', '4', '2018-07-03', '5');
解题思路
Activity表保存了玩家所有的活动记录。包括玩家ID、活动日期(登陆日期)。
题目要求:查询每个玩家第一次登陆平台的日期。
一个玩家可以有多次登录记录,但登陆日期最小的日期即为第一次登陆日期。又因为要求计算每个玩家的最小登陆日期,所以,可以先按玩家ID分组,再使用聚合函数MIN得出登陆日期的最小值。
参考SQL
未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select player_id, min(event_date) first_login from Activity group by player_id;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。