Prawie się denerwuję próbując rozwiązać ten problem:Zapytanie SQL zliczać zarejestrowanych użytkowników dziennie
W mojej aplikacji użytkownicy mogą się rejestrować i usuwać siebie. Data utworzenia i data usunięcia są przechowywane w bazie danych jako znacznik czasu. Muszę wiedzieć, każdego dnia w ciągu kilku dni, ile zarejestrowanych i nie usuniętych użytkowników istniało w tym dniu.
Jeśli mam 10 istniejących użytkowników w dniu 2012-02-01, jednego użytkownika, który usunął konto w dniu 2012-02-03, trzech użytkowników zarejestrowanych w dniu 2012-02-04 i dwóch użytkowników usuniętych w dniu 2012-02- 06 i kwerendy łączną liczbę zarejestrowanych użytkowników od 2012-02-01 aż 2012-02-07 Chciałbym uzyskać wynik takiego:
day total_users 2012-02-01 10 2012-02-02 10 2012-02-03 9 2012-02-04 12 2012-02-05 12 2012-02-06 10 2012-02-07 10
to jest jak moja uproszczona tabela użytkownik wygląda następująco:
user_id, nazwa_użytkownika, created_at, deleted_at
to żaden problem, aby uzyskać numer o f zarejestrowany i nie usuniętych użytkowników do jednego konkretnego dnia (tutaj 2012-02-01, który dostanie mi 10 w moim przykładzie):
select application.application_id as application_id, count(user.user_id) as user_total
from application, user
where application.application_id = user.application_id
and date(user.created_at) <= '2012-02-01'
and ((date(user.deleted_at) > '2012-02-01') or (user.deleted_at is null))
Kto ma pojęcia, w jaki sposób można utworzyć kwerendę (bez kursora), który będzie miał mój oczekiwany wynik? Moja baza danych to MySQL 5.0.51 na Debianie.
góry dzięki Marcus
Dziękuję bardzo, to działa idealnie! Musiałem tylko zamienić "i" w każdej linii na t0, t1 itd. Myślę, że to moja stara wina serwera MySQL. –
@MarcusMuench: Ups, moja wina. Poprawiłem zapytanie - dziękuję. –