我正在尝试查询数据库以检索一段时间内唯一条目的数量。数据看起来像这样:
Day
| UserID
1 |一个
1 |乙
2 |乙
3 |一个
4 |乙
4 | ç
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`
,不同的计数不会考虑前几天的用户ID。
任何想法?我使用的数据集非常大,因此多次查询和后期处理需要很长时间(这就是我目前正在进行的操作)。
由于
答案 0 :(得分:1)
这样的事情怎么样:
SELECT Count(UserID), Day
FROM
(SELECT Count(UserID) as Logons, UserID, Day
FROM yourDailyLog
GROUP BY Day, UserID)
GROUP BY Day
内部选择应消除同一用户在指定日期的重复访问。
远离DISTINCT。对于几乎任何SQL问题来说,这通常是一种可疑的方法。
等等:我现在看到你希望时间段随着时间的推移而增加。这让事情变得有点棘手。为什么不在代码中聚合其余信息而不是通过sql完成所有这些?
答案 1 :(得分:1)
您可以使用子查询
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