У меня есть набор данных, который аналогично выглядит следующим образом:агрегация комплекс SQL
X | U | datetime
-------------
1 | 1 | 1/1/12
1 | 2 | 1/1/12
1 | 2 | 1/1/12
1 | 2 | 1/1/12
1 | 4 | 1/1/12
2 | 2 | 2/1/12
2 | 3 | 2/1/12
1 | 3 | 3/1/12
2 | 4 | 3/1/12
3 | 2 | 4/1/12
это журнал посещений. X
является идентификатором вещи, которую посетил, и U
является идентификатором пользователя
Мне нужно вычислить две статистики.
Учитывая значение для Й (х):
1) «новые посетители»: Подсчитайте количество уникальных пользователей, которые сделали свой первый визит для любого X в x
.
случаи использования:
- Пользователь только посетили
x
один раз -> засчитывается как 1 - Пользователь только посетили
!x
раз -> считается как 0 - Пользователь только посетил
x
дважды -> учитывается как 1 - Пользователь только заходил
!x
дважды -> 0 - Пользователь посетил много Xs, где их первый vi сидеть любой X является
x
-> засчитывается как 1 - пользователь посетил многие крестики, где их первый визит любого X является
!x
-> считается как 0
приведенными выше примерами данных:
X | Count
---------
1 | 3
2 | 1
3 | 0
2) «возвращающиеся посетители»: подсчитайте количество уникальных пользователей, которые посетили x
более одного раза или посетили x
один раз, но посетили другой Х ранее (т.е. посещения, сделанные после их одного посещения x
не рассчитывайте)
примеры из выше данных:
X | Count
---------
1 | 3
2 | 2
3 | 1
Я использую SQL Server 2008, любая помощь очень ценится. Благодаря!
Update
Это, как представляется, ответ Q1, хотя я его не очень быстро :(
select x.X, COUNT(1)
from (
select t1.X
from @t t1
group by t1.X, t1.U
having (select COUNT (1) from @t t2 where t2.u= t1.U and t2.OccurredOn < MIN(t1.OccurredOn)) =0
) x
group by x.X
Update 2
Я думаю это (2)
select t.X, COUNT(1)
from @t t
left join (
select t.U, MIN(t.OccurredOn) as O
from @t t
group by t.U
) x on t.U = x.U and t.OccurredOn <= x.O
where x.U is null
group by t.X
Это не правильно, на всех :( –
Извините, я случайно забыл другие части соединения для первого. Должен работать. – thyme
Да, я заметил, что и добавил их, это все еще не правильно. которые ранее посещают другой X –