2016-08-04 34 views
0
SELECT userid,                       
    (SELECT CASE WHEN (COUNT(CASE WHEN casinowagers != 0 
      THEN 1 
      ELSE null 
      END) 
       + COUNT(CASE WHEN depositmade_amt != 0 
         THEN 1 
          ELSE null 
         END)) >= 3 
     AND (Round(sum(totalhold - playercomps - freemoney - (depositmade_amt*.1)),2)) >= 10 
       THEN "VIP" 
        ELSE "NON-VIP" 
       END as VIPcheck 
    FROM player_activity   
    WHERE YEAR(txndate) = YEAR(CURRENT_DATE - INTERVAL 3 MONTH) 
     AND MONTH(txndate) = MONTH(CURRENT_DATE - INTERVAL 3 MONTH)   
    ) as vipMonthStatus,    
    (COUNT(CASE WHEN casinowagers != 0 
      THEN 1 
      ELSE null 
      END) 
       + COUNT(CASE WHEN depositmade_amt != 0 
         THEN 1 
          ELSE null 
         END)) as activityCount, 
    (Round(sum(totalhold - playercomps - freemoney - (depositmade_amt*.1)),2)) as Value,       
FROM player_activity 
WHERE userid = 2023410 
GROUP BY year(txndate),month(txndate) 
LIMIT 1000 

Also grundsätzlich der vipMonth-Status wird immer als "VIP" zurückgegeben. Für den Monat Mai (wegen der untenstehenden "wo" -Aussage) sollte es jedoch "nicht-vip" sein, da nur 1 Einzahlung und 1 Wette gemacht wurde.CASE-Anweisung funktioniert nicht so wie in SQL

Was gibt?

(WHERE YEAR(txndate) = YEAR(CURRENT_DATE - INTERVAL 3 MONTH) 
     AND MONTH(txndate) = MONTH(CURRENT_DATE - INTERVAL 3 MONTH)) 
+0

Ich vermute, Sie brauchen auch 'WHERE userid = 2023410' in dieser Unterabfrage (oder um es mit einem äquivalenten WHERE zu korrelieren). – Uueerdo

Antwort

0

Sie benötigen die player_activity Tabelle in der vipMonthStatus Unterabfrage auf die player_activity Tabelle in der Hauptabfrage zu binden.

Zuerst alias die "innere" player_activity und die "äußere" player_activity Tabellen, so dass Sie sie auseinander teilen können. So etwas wie in_player_activity und out_player_activity.

Dann müssen Sie eine zusätzliche WHERE-Anweisung zur vipMonthStatus-Unterabfrage hinzufügen, um die Datensätze in der inneren Tabelle auf die verknüpften Datensätze in der äußeren Tabelle basierend auf Benutzer-ID zu beschränken. Es wäre am Ende wie folgt suchen:

FROM player_activity in_player_activity  
WHERE YEAR(in_player_activity.txndate) = YEAR(CURRENT_DATE - INTERVAL 3 MONTH) 
    AND MONTH(in_player_activity.txndate) = MONTH(CURRENT_DATE - INTERVAL 3 MONTH) 
    AND in_player_activity.userid = out_player_activity.userid 

Beachten Sie jetzt, dass Sie Tabellen-Aliases eingeführt haben, müssen Sie den Alias-Präfix alle anderen Spaltennamen hinzuzufügen. Persönlich würde ich etwas prägnanteres wie opa und ipa verwenden.