Join 2 mysql select на основе текстового поля

У меня есть 2 следующих select в Mysql:

1-й выбор:

(SELECT DISTINCT `Online_playerdatabase_v2`.`Player`, 
Online_playerdatabase_v2.First_Deposit_Date As FirstDep, 
TRUNCATE(Online_playerdatabase_v2.Balance,2) as Balance
FROM Online_playerdatabase_v2 
WHERE `Online_playerdatabase_v2`.`Player`<>'Player'
ORDER BY `Online_playerdatabase_v2`.`Balance` DESC;

2d выберите:

SELECT DISTINCT(Online_customer_activity_v2.Customers) as Player,
max(Online_customer_activity_v2.Date) as LastAction
FROM Online_customer_activity_v2
WHERE `Online_customer_activity_v2`.`Total_Bets`>0
Group by Online_customer_activity_v2.Customers

Выход Выберите 1

Player FirstDep Balance
Ray 2014-10-19 9100.00
Ramzi 2014-11-02 9.61
tareq 2014-11-06 805.00
STAN 2014-10-17 7.50
Bill 2014-03-25 68.40
karam 2014-11-16 676.50
Abdul 2014-11-13 650.00
Renaud 2014-03-12 507.00
John 2014-11-22 500.00

Выбор вывода 2

Player LastAction
John 2015-11-13
Bill 2014-12-14
Renaud 2015-03-14
Abdul 2015-11-16
Ray 2015-11-22
STAN 2015-10-29
Ramzi 2015-11-10
Tarek 2015-05-10
karam 2014-12-10
Abdul 2015-02-10

Желаемый вывод, соединение на обоих выберите, что добавляет следующие вычисления: active days (FirstDep-LastAction) и Days_last_Visit (CurrentDate - Last Action)

Подводя итог в следующей таблице:

Player FirstDep Balance LastAction Active_days Days_last_Visit
Ray 2014-10-19 9100.00 2015-11-22 399 1
Ramzi 2014-11-02 9.61 2015-11-10 373 13
tareq 2014-11-06 805.00 2015-05-10 185 197
STAN 2014-10-17 7.50 2015-10-29 377 25
Bill 2014-03-25 68.40 2014-12-14 264 344
karam 2014-11-16 676.50 2014-12-10 24 348
Abdul 2014-11-13 650.00 2015-02-10 89 286
Renaud 2014-03-12 507.00 2015-03-14 367 254
John 2014-11-22 500.00 2015-11-13 356 10

Ваша помощь очень ценится! Благодаря

2 ответа

Следующий запрос должен дать нужный результат. Добавлю, что я присоединился к двум таблицам из ваших промежуточных запросов выше, используя поле Player. Это не очень надежный способ присоединиться, потому что имя не может быть уникальным среди всех игроков в таблице. Лучший способ присоединиться - использовать уникальный идентификатор какого-либо типа.

SELECT t1.Player, t1.FirstDep, t1.Balance, t2.LastAction,
 DATEDIFF(t2.LastAction, t1.FirstDep) AS Active_days,
 DATEDIFF(NOW(), t2.LastAction) AS Days_last_Visit
FROM
(
 SELECT DISTINCT `Online_playerdatabase_v2`.`Player`, 
 Online_playerdatabase_v2.First_Deposit_Date AS FirstDep, 
 TRUNCATE(Online_playerdatabase_v2.Balance,2) AS Balance
 FROM Online_playerdatabase_v2 
 WHERE `Online_playerdatabase_v2`.`Player` <> 'Player'
) t1
INNER JOIN
(
 SELECT DISTINCT(Online_customer_activity_v2.Customers) AS Player,
 MAX(Online_customer_activity_v2.Date) AS LastAction
 FROM Online_customer_activity_v2
 WHERE `Online_customer_activity_v2`.`Total_Bets` > 0
 GROUP BY Online_customer_activity_v2.Customers
) t2
ON t1.`Player` = t2.`Player`


Вам необходимо присоединиться к 2 выбранным в качестве подзапросов в третьем выборе, используя поле игрока. Поля Active_days и Days_last_Visit могут быть вычислены с помощью функции DateDiff().

SELECT *
,DateDiff(t2.LastAction,t1.FirstDep) AS Active_days
,DateDiff(CURDATE(), t2.LastAction) AS Days_last_Visit
FROM
(SELECT DISTINCT `Online_playerdatabase_v2`.`Player`, 
Online_playerdatabase_v2.First_Deposit_Date As FirstDep, 
TRUNCATE(Online_playerdatabase_v2.Balance,2) as Balance 
FROM Online_playerdatabase_v2 
WHERE `Online_playerdatabase_v2`.`Player`<>'Player'
ORDER BY `Online_playerdatabase_v2`.`Balance` DESC) t1
LEFT JOIN
(SELECT DISTINCT(Online_customer_activity_v2.Customers) as Player,
max(Online_customer_activity_v2.Date) as LastAction
FROM Online_customer_activity_v2
WHERE `Online_customer_activity_v2`.`Total_Bets`>0
Group by Online_customer_activity_v2.Customers) t2
ON t1.Player=t2.Player

Однако вы должны учитывать, как вы присоединяетесь к 2 наборам данных. Я использовал левое соединение, поскольку таблица игроков, вероятно, будет содержать всех игроков, но вы можете захотеть пойти на внутреннее соединение или имитировать полное внешнее соединение в зависимости от ваших требований и ваших данных.

licensed under cc by-sa 3.0 with attribution.