2010-12-12 16 views
5

Mam tabeli danych z następujących dziedzinMySQL kwerendy - znaleźć „nowych” użytkowników dziennie

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

Zapytanie potrzebuje mi powiedzieć ile wystąpiły zdarzenia o nowe ID użytkownika dla każdego dnia w całym zestawie . Tak więc, dla każdego dnia, ile zdarzeń istnieje, które mają identyfikator użytkownika, który nie istnieje w żadnym z poprzednich dni. Próbowałem już wiele razy i codziennie mogę uzyskiwać unikalnych użytkowników, ale nie mogę ustalić, jak codziennie otrzymywać "nowych" użytkowników.

+2

możemy założyć, że userid jest ** nie ** wyjątkowy w tabeli zdarzeń? –

+0

Tak, przepraszam, tak jest. –

+0

Wydaje mi się również, że nie było to jasne. Potrzebuję liczby nowych użytkowników dziennie - a nie ilości aktywności dla nowych użytkowników dziennie - jeśli to ma sens? –

Odpowiedz

1

Dziękuję wszystkim za pomoc - zagłosowałem za pomocą. Oto co zrobiłem:

Stworzyłem te 2 widoki (musiałem skończyć z widokiem i musiałem utworzyć 2, ponieważ wydaje się, że nie można zagnieździć instrukcji select w widokach).

Widziany:

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 

newusers:

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

Dobre pytanie. Nie mam dokładnego rozwiązania, ale oto podejście, które widziałem wcześniej:

Wykonaj SELECT, w którym porównasz EventTimeStamp z MIN(EventTimeStamp) dla danego ID użytkownika, jak określono za pomocą zagnieżdżonej instrukcji SELECT na tej samej tabeli w celu obliczenia znacznik czasu MIN dla każdego identyfikatora (np. GROUP BY UserID).

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

86400- (EventTimeStamp) jako new_users

+0

Nie jestem pewien, czy rozumiem tę odpowiedź - czego mi brakuje? –

1

Pierwszy dostać stolik b z dla każdego użytkownika, gdy po raz pierwszy przybył, następnie dołączyć tę tabelę, aby uzyskać wszystkie zdarzenia dla danego użytkownika w danym dniu.

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) 
Powiązane problemy