Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL letzte Anmeldung und Anzahl der Anmeldungen in den letzten 3 Monaten

Lösen Sie zuerst jedes Problem einzeln:

SELECT A.UserID, MAX(TIME) AS LastLogin  
FROM UserMaster A  
LEFT JOIN UserWebActivity B
ON A.UserID = B.UserID  
AND Activity = 'Login'  
GROUP BY A.UserID

SELECT A.UserID, COUNT(Activity) AS Logins
FROM UserMaster A  
LEFT JOIN UserWebActivity B ON A.UserID = B.UserID  
AND Activity = 'Login'  
AND TIME BETWEEN (NOW() - INTERVAL 3 MONTH) AND NOW( )  
GROUP BY A.UserID

Testen Sie sie separat, um sicherzustellen, dass jede dieser Abfragen wie gewünscht funktioniert, und passen Sie sie gegebenenfalls an.

Wenn Sie dann zufrieden sind, dass beide funktionieren, fügen Sie die Ergebnisse zusammen:

SELECT T1.UserID, T1.LastLogin, T2.Logins
FROM
(
    SELECT A.UserID, MAX(TIME) AS LastLogin  
    FROM UserMaster A  
    LEFT JOIN UserWebActivity B
    ON A.UserID = B.UserID  
    AND Activity = 'Login'  
    GROUP BY A.UserID
) AS T1
JOIN
(
    SELECT A.UserID, COUNT(Activity) AS Logins
    FROM UserMaster A  
    LEFT JOIN UserWebActivity B
    ON A.UserID = B.UserID  
    AND Activity = 'Login'
    AND TIME BETWEEN (NOW() - INTERVAL 3 MONTH) AND NOW()
    GROUP BY A.UserID
) AS T2
ON T1.UserID = T2.UserID

Dadurch kann MySQL die Indizes für die verschiedenen Abfragen optimal nutzen.