题目链接:点击打开链接
题目大意:略。
解题思路:
- 解决方案(1):MIN(event_date)是针对player_id分组内的聚合函数,而不是定位到了一行数据,因此它不会影响到SELECT到的device_id,所以会默认返回同组内第一个device_id。
- 解决方案(2):自定义变量,这里初始化为 -1 而不是 NULL,是因为 NULL 不能用来比较 <> 或 !=,否则会出现结果离你的预想不一样。
AC 代码
--解决方案(1) SELECTact.player_id, act.device_idFROMActivityact, (SELECTplayer_id, MIN(event_date) event_dateFROMActivityGROUPBYplayer_id) rsWHEREact.player_id=rs.player_idANDact.event_date=rs.event_date--解决方案(2) SELECTplayer_id, device_idFROM (SELECTIF(<>player_id, 1, 0) mark, :=player_id, player_id, device_idFROM (SELECT*FROMActivityORDERBYplayer_id, event_date) rs, (SELECT :=-1) init) rs1WHERErs1.mark=1