2015-11-23 7 views
5

ho il 2 seguente selezionare in Mysql:join 2 mysql selezionare in base al campo di testo

prima selezionare:

(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 selezionare:

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 

uscita Seleziona 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 

uscita selezionare 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 

output desiderato, un join sia Select che aggiunge seguenti calcoli: active days (FirstDep-LastAction) e Days_last_Visit (CurrentDate - Last Action)

riassunte nella seguente tabella:

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 

Il tuo aiuto è molto apprezzato! Grazie

risposta

1

La seguente query dovrebbe fornire il risultato desiderato. Aggiungerò che ho unito le due tabelle delle query intermedie sopra utilizzando il campo Player. Questo non è un modo molto efficace per aderire, perché il nome potrebbe non essere unico tra tutti i giocatori nella tabella. Un modo migliore per unirsi sarebbe utilizzare un identificatore univoco di qualche tipo.

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` 
0

È necessario unire i 2 selezioni come subquery in una terza selezione utilizzando il campo giocatore. I campi Active_days e Days_last_Visit possono essere calcolati utilizzando lo DateDiff() function.

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 

È necessario considerare, tuttavia, come si uniscono i 2 dataset. Ho usato il join sinistro, dal momento che la tabella dei giocatori probabilmente contiene tutti i giocatori, ma potresti volere un join interno o simulare un join esterno completo in base alle tue esigenze e ai tuoi dati.