--- tags: sql, LeetCode --- # 511. Game Play Analysis I `Game Play Analysis I` 透過`leetcode 511`[Game Play Analysis I](https://leetcode.com/problems/game-play-analysis-i/)來練習 #### 使用table ![](https://i.imgur.com/tvmBEP1.png) (player_id, event_date) 是這個表的主鍵。 這張表顯示了一些遊戲玩家的活躍度。 每一行都是玩家在某天使用某些設備註銷之前登錄並玩了許多遊戲(可能為 0)的記錄。 ## 題目說明: 編寫 SQL 查詢以報告每個玩家的首次登錄日期。 按任意順序返回結果表。 查詢結果格式位於以下範例中。 ![](https://i.imgur.com/kBO6HXC.png) ## 解題: 以下為第一個例題 **43.44%** 1. select `MIN(M.EVENT_DATE)` (最小值) 2. GROUP BY 起來 (依M.PLAYER_ID) ```sql= SELECT M.PLAYER_ID,MIN(M.EVENT_DATE) AS FIRST_LOGIN FROM Activity M GROUP BY M.PLAYER_ID ``` 以下為第二個例題 **72.11%** select 2次 1. 先將Activity資料表處理 加入id排序(依照M.EVENT_DATE) [ROW_NUMBER()](https://ithelp.ithome.com.tw/articles/10225653) `ROW_NUMBER() OVER(PARTITION BY M.PLAYER_ID ORDER BY M.EVENT_DATE)` ![](https://i.imgur.com/uJKgVpU.png) 2. 再select出id = 1 的就是各玩家初次登入日期 ```sql= SELECT A.PLAYER_ID,A.FIRST_LOGIN FROM( SELECT M.PLAYER_ID,M.EVENT_DATE AS FIRST_LOGIN , ROW_NUMBER() OVER(PARTITION BY M.PLAYER_ID ORDER BY M.EVENT_DATE) AS ID FROM Activity M ) A WHERE ID = 1 ``` By. @UEW2WaUHTqSmPOSfnfXrNw