【问题标题】:LeetCode #512 Game Play Analysis MySQLLeetCode #512 游戏玩法分析 MySQL
【发布时间】:2020-08-27 05:17:06
【问题描述】:

我在做这个问题 LeetCode #512 我写的原始代码是:

select a.player_id, a.device_id from 
(select player_id, device_id, min(event_date)
from Activity
group by player_id) a

我的逻辑是首先过滤掉每个玩家的最小对应事件日期。代码似乎选择了我想要的正确最早日期,但未能对应与该特定日期匹配的设备 ID。谁能告诉我为什么会发生这种情况以及如何修复我的代码?

感谢您抽出宝贵时间!

【问题讨论】:

    标签: mysql sql subquery min


    【解决方案1】:

    修改您的查询如下,选择 player_id,device_id 对应于 minimum event_Date。

    select a.player_id, a.device_id from 
    (select player_id, device_id, min(event_date)
    from Activity
    group by player_id,device_id) a
    

    或者使用下面的窗口函数,

    select a.player_id, a.device_id from 
    (select player_id, device_id,event_Date,row_number() over (partition by player_id order by event_Date asc) AS rn
    from Activity) a
    where rn = 1
    

    【讨论】:

    • 感谢您的快速响应,但它没有完成这项工作。
    • 你能展示你的数据样本和当前输出吗?使用窗口函数尝试第二个查询。
    • 示例数据:{"headers":{"Activity":["player_id","device_id","event_date","games_played"]},"rows":{"Activity":[ [1,2,"2016-03-01",5],[1,2,"2016-05-02",6],[1,3,"2015-06-25",1],[3 ,1,"2016-03-02",0],[3,4,"2016-02-03",5]]}}
    • 当前输出:{"headers": ["player_id", "device_id"], "values": [[1, 2], [3, 1]]}
    • 预期:{"headers": ["player_id", "device_id"], "values": [[1, 3], [3, 4]]}
    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多