Hallo,
ich brauche eine Abfrage (in MySQL) mit der ich die Anzahl der User für verschiedene MOnate ermittel.
z.B.
UserID, Registrierdatum
1, 01.01.2010
2, 01.02.2010
3, 01.03.2010
Ich möchte nun eine Abfrage erstellen, die mir sagt, dass in Monat 01/2010 1 User registriert war, in Monat 2/2010: 2User und in Monat 03/2010: 3 User.
Wenn ich einfach "Group by Month(Registrierdatum)" nehme, tacht User 1 nur im Monat 01/2010 auf, und nicht in den nachfolgenden Monaten.
Bekommt man das in einer Abfrage hin, oder muss ich für jeden Monat einzel ein SQL-Statement starten?
Ankündigung
Einklappen
Keine Ankündigung bisher.
statistik: anzhal der user gruppiert nach monat
Einklappen
Neue Werbung 2019
Einklappen
X
-
statistik: anzhal der user gruppiert nach monat
Stichworte: -
-
Zitat von waldaux Beitrag anzeigenEdith:
Ok, ich glaub ich habs:
Code:Select count(*), daten.* from user u inner join ( select max(timestamp) as timestamp from user u group by Month(u.timestamp), Year(u.timestamp) ) daten on daten.timestamp >= u.timestamp group by daten.timestamp
-
Zitat von ACO Beitrag anzeigendie jeweils höchste User-ID, was identisch ist mit der Anzahl der insgesamt registrierten User
Das wäre ein ganz grober Fehler, die ID für so etwas zu missbrauchen.
Einen Kommentar schreiben:
-
Da dein Eingangsbeispiel nicht angibt, ob gelöschte User noch mitgezählt werden sollen oder nicht, hier mal ein anderer Vorschlag:
Code:SELECT MAX(UserID) FROM tabelle GROUP BY (passende Registrierungsmonatumwandlungsformel)
Einen Kommentar schreiben:
-
Ja, ich soll aber eine Statistik erstellen, in der viele Zeiträume angezeigt werden. So müsste ich für jeden zeitraum ein SQL-Statement starten.
ich dachte an sowas in der art:
Code:Select count(*), daten.* from user u inner join ( select max(timestamp) as timestamp from user u group by Month(timestamp), Year(timestamp) ) daten on daten.timestamp < u.timestamp group by daten.timestamp
Ok, ich glaub ich habs:
Code:Select count(*), daten.* from user u inner join ( select max(timestamp) as timestamp from user u group by Month(u.timestamp), Year(u.timestamp) ) daten on daten.timestamp >= u.timestamp group by daten.timestamp
Einen Kommentar schreiben:
-
Zitat von ACO Beitrag anzeigenwarum so kompliziert?
Mit SELECT COUNT(*) und einer bis zwei Datumsangaben in der WHERE-Klausel kannst du mit einer Abfrage für jeden beliebigen Zeitraum die Anzahl der angemeldeten User ermitteln.
Einen Kommentar schreiben:
-
warum so kompliziert?
Mit SELECT COUNT(*) und einer bis zwei Datumsangaben in der WHERE-Klausel kannst du mit einer Abfrage für jeden beliebigen Zeitraum die Anzahl der angemeldeten User ermitteln.
Einen Kommentar schreiben:
-
Code:SELECT count(*), YEAR(RegDatum) AS year, MONTH(RegDatum) AS month FROM user GROUP BY YEAR(RegDatum), MONTH(RegDatum)
Wenn ich einfach "Group by Month(Registrierdatum)" nehme, tacht User 1 nur im Monat 01/2010 auf, und nicht in den nachfolgenden Monaten.
Einen Kommentar schreiben:
-
Zitat von waldaux Beitrag anzeigenIch möchte nun eine Abfrage erstellen, die mir sagt, dass in Monat 01/2010 1 User registriert war, in Monat 2/2010: 2User und in Monat 03/2010: 3 User.
Deine Datensätze enthalten diese Information ja auch nur indirekt - für User 1 gibt es im Monat 02/2010 schließlich gar keinen.
Einen Kommentar schreiben:
-
Zitat von ChrisB Beitrag anzeigenWelchen Datentyp hat denn die Spalte Registrierdatum?
statt "Group by Month(Registrierdatum)" schreibe ich sowas wie (Group by Month(Registrierdatum), Year(Registrierdatum)". Aber damit erhalte ich ja nur die "Neuanmeldungen"
Einen Kommentar schreiben:
Einen Kommentar schreiben: