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 SELECT
GROUP 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.
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