Mysql 从表A中按表B字段分组的X玩家获得每种奖金类型的最后记录

Mysql 从表A中按表B字段分组的X玩家获得每种奖金类型的最后记录,mysql,max,Mysql,Max,正如标题所述,我想从表中获得X玩家的每个奖金id的最后一条记录“赎回的奖金”按表奖金中的名称字段分组 这是我的数据库结构: 表:奖金 "id" "uid" "name" "free_spins" -------------------------------------------------------- "1" "1111111111111" "welcome_bonus" "0" "2"

正如标题所述,我想从表中获得X玩家的每个奖金id的最后一条记录“赎回的奖金”按表奖金中的名称字段分组

这是我的数据库结构:


表:奖金

"id"    "uid"               "name"              "free_spins"        
--------------------------------------------------------
"1"     "1111111111111"     "welcome_bonus"     "0"
"2"     "1111111111112"     "deposit100_bonus"  "0"
"3"     "1111111111113"     "deposit150_bonus"  "0"
"4"     "1111111111114"     "deposit200_bonus"  "0"
"5"     "1111111111111"     "welcome_bonus"     "10"
"6"     "1111111111112"     "deposit100_bonus"  "10"
"7"     "1111111111114"     "deposit200_bonus"  "10"
"8"     "1111111111112"     "deposit100_bonus"  "50"
表:玩家

"id"    "username"
------------------
"1"     "pepe"
"2"     "pedro"
"27"    "david"
"28"    "jorge"
"id"    "player_id"     "bonus_id"      "instance_id"
-----------------------------------------------------
"1"     "1"             "7"             "abcd456"
"2"     "28"            "1"             "abc2356"
"3"     "2"             "7"             "ghb564"
"4"     "27"            "1"             "dfv444"
"5"     "27"            "6"             "vbb333"
"6"     "27"            "8"             "vd4332"
表:赎回的奖金

"id"    "username"
------------------
"1"     "pepe"
"2"     "pedro"
"27"    "david"
"28"    "jorge"
"id"    "player_id"     "bonus_id"      "instance_id"
-----------------------------------------------------
"1"     "1"             "7"             "abcd456"
"2"     "28"            "1"             "abc2356"
"3"     "2"             "7"             "ghb564"
"4"     "27"            "1"             "dfv444"
"5"     "27"            "6"             "vbb333"
"6"     "27"            "8"             "vd4332"


玩家id 27的期望结果:

"id"    "player_id"     "bonus_id"      "instance_id"   "bonuses.name"
-----------------------------------------------------------------------------
"4"     "27"            "1"             "dfv444"        "welcome_bonus"
"6"     "27"            "8"             "vd4332"        "deposit100_bonus"



传统信息:我在查看和,但两者都不是我的情况。

部分答案;我不知道你从哪里得到4号和6号身份证

 SELECT a.*
      , c.instance_id
   FROM bonus_records a
   JOIN
      (
      SELECT uid
           , player_id
           , MAX(x.id) bonus_id
        FROM bonus_records x
        JOIN redeemed_bonus_records y
          ON y.bonus_id = x.id
       WHERE y.player_id = 27
       GROUP
          BY uid
           , player_id
     ) b
    ON b.bonus_id = a.id
  JOIN redeemed_bonus_records c
    ON c.bonus_id = a.id
   AND c.player_id = b.player_id;
  +----+-----+------------------+------------+-------------+
  | id | uid | name             | free_spins | instance_id |
  +----+-----+------------------+------------+-------------+
  |  1 | 11  | welcome_bonus    |          0 | dfv444      |
  |  8 | 12  | deposit100_bonus |         50 | vd4332      |
  +----+-----+------------------+------------+-------------+

做得很好,提供了一个小提琴,但链接的答案完全满足您的需要谢谢回应,但我已经尝试过,并没有给我预期的结果。如果需要,我可以刷新该查询的db FIDLE,您将看到。@我已更新的db FIDLE的查询,但结果不是预期的结果,因为我有两个其他表用于获取最大id,而不是同一个表。您的数据集不能代表问题,或者您对问题的描述不充分。描述已编辑。总之,我不知道为什么如果我把我想要得到的东西放得很清楚,数据就没有代表性。试着添加更多的列,比如instance_id和compare。您将看到,虽然它返回max id,但其余列不属于max id行,这就是链接答案的所在。我将尝试以最好的方式向您解释。奖金记录表包含按名称或uid分组的不同奖金,即所有具有相同名称的行,即相同奖金的不同版本。因此,我想获得表中每种类型奖金的最后一行(按奖金记录.name分组),对应于27号玩家的兑换奖金记录。您的查询仍然不起作用,并且要检查,如果您添加了实例id,您将看到它不断返回奖金记录行。我的查询返回id 1和8,因此,如果您在bonus\u id=id上将赎回的\u奖金加入到上面,您将获得正确的行!?!