2016-08-09 36 views
0
SELECT 
    userid, 
    CASE 
     WHEN (COUNT(CASE 
         WHEN onlinesportsgamewagers != 0 
         THEN 1 
         ELSE null 
        END) 
      + COUNT(CASE 
         WHEN depositmade_amt != 0 
          THEN 1 
          ELSE null 
        END)) >= 10 
      THEN "VIP" 
      ELSE "NON-VIP" 
    END as VIPcheck    
FROM 
    player_activity 
WHERE 
    userid = 2023410 
GROUP BY 
    year(txndate), month(txndate) 

Diese Abfrage bestimmt den VIP-Status des Benutzers für jeden Monat.Verwendung der Bedingung in der SQL-Abfrage

Letztendlich möchte ich eine Abfrage haben, die bestimmt, ob der Benutzer für mindestens 3 Monate (einschließlich des aktuellen Monats) VIP-Status erreicht hat. Momentan ist es nur der Benutzer 2023410, aber irgendwann möchte ich das für die gesamte Datenbank ausführen.

Daher wäre meine letzte Ausgabe sein:

Benutzer - VIPcheck (3 verschiedene Monate w/Aktiv-Status)

(eine Zeile pro Benutzer-ID)

HAVING COUNT(CASE WHEN (COUNT(CASE WHEN onlinesportsgamewagers != 0 
      THEN 1 
       ELSE null 
      END) 
       + COUNT(CASE WHEN depositmade_amt != 0 
         THEN 1 
          ELSE null 
         END)) >= 10 
      THEN 1 
       ELSE 0 
       END) 

die oben mit Aussage versucht, aber es hat nicht funktioniert. Irgendwelche Vorschläge?

Antwort

0

Wenn ich richtig verstehe, wird dies den VIP-Status für einen Benutzer durch Monat:

SELECT userid, year(txndate), month(txndate),                       
     (CASE WHEN SUM(CASE WHEN onlinesportsgamewagers <> 0 THEN 1 ELSE 0 END) + 
        SUM(CASE WHEN depositmade_amt <> 0 THEN 1 ELSE 0 END) >= 10 
      THEN 'VIP' 
      ELSE 'NON-VIP' 
     END) as VIPcheck    
FROM player_activity 
GROUP BY userid, year(txndate), month(txndate); 

Eine weitere Aggregation erhalten, was Sie wollen:

SELECT userid, 
     (CASE WHEN SUM(VIPcheck = 'VIP') >= 3 THEN 'SUPER-VIP' 
      WHEN SUM(VIPcheck = 'VIP') >= 1 THEN 'VIP' 
      ELSE 'HOI POLLOI' 
     END) as status 
FROM (SELECT userid, year(txndate), month(txndate),                       
      (CASE WHEN SUM(CASE WHEN onlinesportsgamewagers <> 0 THEN 1 ELSE 0 END) + 
         SUM(CASE WHEN depositmade_amt <> 0 THEN 1 ELSE 0 END) >= 10 
        THEN 'VIP' 
        ELSE 'NON-VIP' 
       END) as VIPcheck    
     FROM player_activity 
     GROUP BY userid, year(txndate), month(txndate) 
    ) uym 
GROUP BY userid; 
+0

Hallo. Ihre Abfrage schien zu funktionieren. Allerdings verstehe ich nicht, warum man den [VIP-Status für einen Benutzer pro Monat] in der FROM-Sektion anstatt in der SELECT-Sektion einträgt. – eddd83

+0

@ eddd83. . . Ich verstehe den Kommentar nicht vollständig, aber diese Abfrage muss zwei Aggregationen durchführen. Daher gibt es in der FROM-Klausel eine Unterabfrage. –