Msql: подсчет роста со временем - PullRequest
2 голосов
/ 15 марта 2011

Я писал об этом несколько недель назад, но не думаю, что задал вопрос четко, потому что ответы, которые я получил, были не те, которые я искал. Я думаю, что лучше начать заново.

Я пытаюсь выполнить запрос к базе данных, чтобы получить количество уникальных записей с течением времени. Данные выглядят примерно так:

Day | UserID
1 | A
1 | B
2 | В * +1010 * 3 | A
4 | B
4 | C
5 | D

Я бы хотел, чтобы результат запроса выглядел следующим образом

промежуток времени | COUNT (DISTINCT UserID)
С 1 по 1 день | 2
С 1 по 2 день | 2 * * тысяча двадцать-один С 1 по 3 день | 2
С 1 по 4 день | 3
С 1 по 5 день | 4

Если я сделаю что-то вроде

SELECT COUNT(DISTINCT `UserID`) FROM `table` GROUP BY `Day`

, отдельные подсчеты не будут учитывать идентификаторы пользователей предыдущих дней.

Есть идеи? Набор данных, который я использую, довольно большой, поэтому множественные запросы и постобработка занимают много времени (вот как я это делаю в настоящее время).

Спасибо

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Вы можете использовать подзапрос

Пример таблицы

create table visits (day int, userid char(1));
insert visits values
(1,'a'),
(1,'b'),
(2,'b'),
(3,'a'),
(4,'b'),
(4,'c'),
(5,'d');

Запрос

select d.day, (select count(distinct userid) from visits where day<=d.day)
from (select distinct day from visits) d
1 голос
/ 16 марта 2011

как примерно так:

SELECT Count(UserID), Day 
FROM     
    (SELECT Count(UserID) as Logons, UserID, Day 
    FROM yourDailyLog
    GROUP BY Day, UserID)
GROUP BY Day

Внутренний выбор должен исключить повторные посещения одного и того же пользователя в определенный день.

Держитесь подальше от DISTINCT.Обычно это сомнительный подход почти к любой проблеме SQL.

Подождите: теперь я вижу, что вы хотите, чтобы период времени увеличивался со временем.Это делает все немного сложнее.Почему бы вам не собрать всю остальную информацию в коде, а не делать все это через sql?

...