2017-05-18 1 views
-1

Wie bekomme ich wie viele Tage Benutzer gerade Login in einem Monat oder Jahren? HierWie bekomme ich wie viele Tage direkte Benutzeranmeldung in MySQL?

ein Beispiel:

user_id | login 
1   | 2017-05-01 
2   | 2017-05-01 
1   | 2017-05-03 
1   | 2017-05-04 
1   | 2017-05-05 

ich viele Tage erhalten möchten für user_id 1 3 Tage gerade Login mit einer MySQL-Abfrage.

+0

Willkommen bei SO. Hast du einen Code, an dem du gearbeitet hast? Bitte poste es hier. Machen Sie eine Tour durch SO, lesen Sie den Hilfebereich, um herauszufinden, wie Sie eine Frage stellen können. – Syfer

Antwort

1

Sie müssen SELECT alle Zeilen in der Reihenfolge der login absteigend, speichern früheres Datum und Benutzer-ID in temporären Variablen und das Datum Differenz für jede Zeile vergleichen, zB:

SELECT user_id, login, 
IF(@previousid = user_id AND DATEDIFF(@previouslogin, login) = 1, @count:= @Count + 1, @count:=1) as `count`, 
@previousid := user_id, @previouslogin := login 
FROM logins, (SELECT @previousid := null, @count := 1, @previouslogin := null) a 
ORDER BY login desc; 

Ist das erledigt, können Sie wickeln diese Abfrage in einer anderen SELECTGROUP BY mit MAX Aggregatfunktion verwenden, um die maximale Anzahl der Tage für jeden Benutzer zu bekommen, zB:

SELECT user_id, MAX(count) as `count` 
FROM (
SELECT user_id, login, 
IF(@previousid = user_id AND DATEDIFF(@previouslogin, login) = 1, @count:= @Count + 1, @count:=1) as `count`, 
@previousid := user_id, @previouslogin := login 
FROM logins, (SELECT @previousid := null, @count := 1, @previouslogin := null) a 
ORDER BY login desc) a 
GROUP BY user_id; 

Hier ist die SQL Fiddle.

Verwandte Themen