Получить последнюю запись для каждого типа бонуса X-игроком из таблицы A, сгруппированной по полю таблицы B - PullRequest
0 голосов
/ 24 мая 2019

Как видно из названия, я хочу получить последнюю запись каждого bonus_id по X игроку из таблицы "redeemed_bonuses" , сгруппированных по name поле из таблицы бонусы .

Это моя структура базы данных:


Таблица: бонусы

"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"

Таблица: redeemed_bonuses

"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"



Желаемый результат для player_id 27 :

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



ПРИМЕР DB-FIDDLE

Дополнительная информация: Я искал вопрос и ответ но оба не мои дела.

1 Ответ

1 голос
/ 24 мая 2019

Частичный ответ; Я не знаю, откуда у тебя 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      |
  +----+-----+------------------+------------+-------------+
...