6 Stimmen

MySQL-Abfrage - Suche nach "neuen" Benutzern pro Tag

Ich habe eine Datentabelle mit den folgenden Feldern

EventID        : Int, AutoIncrement, Primary Key
EventType      : Int                             ' Defines what happened
EventTimeStamp : DateTime                        ' When the Event Happened
UserID         : Int                             ' Unique

Die Abfrage muss mir sagen, wie viele Ereignisse mit neuen UserIDs für jeden Tag im gesamten Satz aufgetreten sind. Also, für jeden Tag, wie viele Ereignisse existieren, die eine UserID haben, die es an keinem vorherigen Tag gab. Ich habe viel ausprobiert, und ich kann eindeutige Benutzer pro Tag erhalten, aber ich kann nicht herausfinden, wie man "NEUE" Benutzer pro Tag erhält.

2voto

Gareth Punkte 21
Select count(EventId) from table
where 
UserId 
  not in (select UserId from table where EventTimeStamp < now() - interval 1 day)

2voto

Charlie Skilbeck Punkte 1029

Ich danke Ihnen allen für Ihre Hilfe - ich habe für die Unterstützung gestimmt. Hier ist, was ich getan habe:

Ich habe diese 2 Ansichten erstellt (ich musste mit einer Ansicht enden, und musste 2 erstellen, da es scheint, dass Sie Select-Anweisungen innerhalb von Ansichten nicht verschachteln können).

Sichtungen:

select min(to_days(`Events`.TimeStamp)) AS Day0,
    `Events`.TimeStamp AS TimeStamp,
    `Events`.UserID AS UserID
from `Events` group by `Events`.UserID order by `Events`.UserID

NeueBenutzer:

select count(distinct Sightings.UserID) AS Count,
    date(Sightings.TimeStamp) AS Date from Sightings
    group by date(Sightings.TimeStamp)

1voto

Jason S Punkte 178087

Gute Frage. Ich habe keine genaue Lösung, aber hier ist der Ansatz, den ich schon einmal gesehen habe:

Führen Sie ein SELECT durch, bei dem Sie die EventTimeStamp con MIN(EventTimeStamp) für eine bestimmte Benutzer-ID, die durch eine verschachtelte SELECT-Anweisung in derselben Tabelle ermittelt wird, um den MIN-Zeitstempel für jede ID zu berechnen (z. B. GROUP BY UserID ).

1voto

Konerak Punkte 38232

Zuerst einen Tisch besorgen b für jeden Benutzer bei seiner Ankunft, dann diese Tabelle verbinden, um alle Ereignisse für diesen Benutzer für diesen Tag zu erhalten.

SELECT DATE(a.EventTimeStamp), COUNT(*) FROM table a
JOIN
(SELECT MIN(EventTimeStamp) AS EventTimeStamp, UserID from table group by userID) b
ON a.UserID = b.UserID
AND DATE(a.EventTimeStamp) = DATE(b.EventTimeStamp) 
GROUP BY DATE(a.EventTimeStamp)

-2voto

Webist Punkte 39

86400-(EventTimeStamp) as new_users

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X