首页 > 试题广场 >

在gameList表中(player_id, event_d

[单选题]

在gameList表中(player_id, event_date)是主键,如何显示每个玩家(player_id)首次登录的设备号(device_id),并同时显示玩家ID(player_id)?

player_id

device_id

event_date

games_played

111

21

2020-03-01

5

111

21

2020-01-02

6

212

33

2020-09-03

1

322

11

2020-01-21

0

322

44

2020-03-02

5

  • SELECT player_id, device_id FROM gamelist WHERE event_dateIN(SELECT event_date FROM gamelist)

  • SELECT player_id, device_id min(device_id) as first_login FROM gamelist GROUP BY player_id

  • SELECT player_id, device_id FROM gamelist WHERE event_date IN(SELECT event_date FROM gamelist GROUP BY player_id)

  • SELECT player_id, device_id FROM(SELECT * ,rank() over (partition by player_id order by event_date ) as rank_date from gamelist )t WHERE t.rank_date=1

可不可以用关联子查询呢?
select player_id, device_id from gamelist g1
where event_date=
(select min(event_date) from gamelist g2 where g1.player_id=g2.player_id)
发表于 2022-05-09 14:25:19 回复(1)
更多回答
Rank()函数:为结果集分区中每一行分配一个排名,行等级由一加上前面的等级指定。
RANK() OVER(
        PARTITION BY 表达式      ##将结果集划分为分区
        ORDER BY 表达式 [ASC|DESC] ##对分区内的进行排序
发表于 2022-03-19 16:01:49 回复(3)
另外一种写法 Select player_id,devince_id,event_date from( select *,rank() over(partition by player_id order by event_date) as 排序 fron gamelist)t) where 排序=1
发表于 2022-01-02 11:42:42 回复(7)
感觉答案查出来不太准确   如果恰好有A在B第一次上网的那天也上网了,那么不管A这天是不是第一次上网,都会被查出来

发表于 2022-01-17 17:04:11 回复(5)
Select player_id, device_id, event_date
from (select g.*,rank() over(partition by player_id order by event_date )as rank_date from gamelist g )
where rank_date = 1;

发表于 2022-05-13 09:53:49 回复(1)
这个答案的前提是一天只能有一个玩家登录是吧!?
发表于 2022-02-28 15:51:44 回复(0)
这道题没看懂
发表于 2022-06-18 04:27:01 回复(1)
发表于 2022-06-11 14:45:02 回复(0)
对于b选项,group by player_id 时前面没有显示concat(),就出现每次取第一个数据,min()没作用一样,我是这样理解的,d
是最好理解的
发表于 2022-03-28 10:42:36 回复(0)
括号内的查询select中并没有查询 player_id,为什么最后就group by   player_id  还是正确的呢?
发表于 2022-03-03 23:44:35 回复(6)
sqlservice:
SELECT player_id,event_date,device_id FROM gameList GROUP BY player_id ,event_date,device_id
having event_date in (select min(event_date) from gameList GROUP BY player_id)

发表于 2023-05-31 15:51:26 回复(0)
我看不懂第四个答案,但我看出来前三个都是错的
发表于 2023-02-17 15:36:32 回复(0)

SELECT player_id, device_id FROM(SELECT * ,rank() over (partition by player_id order by event_date ) as rank_date from  gamelist )t  WHERE t.rank_date=1
rank函数的默认升序排列。排序值从1开始。
发表于 2022-09-27 16:18:53 回复(0)
我觉得这题用row_number()排序更准确,若用rank排名,当同组内有同一时间均为首次登录的数据,可能查出的结果会重复。
发表于 2022-08-26 10:22:58 回复(0)
严格来说没有正确答案
发表于 2022-03-13 20:27:06 回复(0)