Как получить данные строки с MAX (поле) для каждого уникального идентификатора - PullRequest
0 голосов
/ 23 марта 2020

У меня есть одна таблица GameData

--id(primary)--playTime--gameId--score--userId(foreign)
   1             100       1      50     asd
   2             150       1      100    asd
   3             200       2      150    asd
   4             200       2      40     qwe
   5             100       1      60     qwe
   6             90        1      30     qwe
   7             180       2      10     qwe

Учитывая userId я хочу получить строки с наивысшим playTime для каждого уникального идентификатора игры .

Например если userId = = "asd" запрос должен вернуть:

[
{playTime:150,gameId:1,score:100},{playTime:200,gameId:2,score:150}


]

если userId = = "qwe" запрос должен вернуть:

   [
    {playTime:100,gameId:1,score:60},{playTime:200,gameId:2,score:40}


    ]

Это то, что я пытался, но это не дает желаемого результат:

 "SELECT GameData.score,MAX(GameData.playTime) as playTime,GameData.gameId FROM GameDataWHERE GameData.userId=? GROUP BY GameData.gameId"

1 Ответ

1 голос
/ 23 марта 2020

Вы можете попробовать запрос ниже -

SELECT GD.playTime, GD.gameId, GD.score
FROM (SELECT MAX(playTime) playTime, gameId
      FROM GameData
      WHERE userId = 'qwe'   -- Or asd
      GROUP BY gameId) M_ID
JOIN GameData GD ON M_ID.playTime = GD.playTime
                 AND M_ID.gameId = GD.gameId
...