Sql:随着时间的推移计算增长

时间:2011-03-15 20:53:20

标签: mysql group-by distinct

几周前我发布了这个帖子,但我认为我没有清楚地问过这个问题,因为我得到的答案并不是我想要的。我认为最好重新开始。

我正在尝试查询数据库以检索一段时间内唯一条目的数量。数据看起来像这样:

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。

任何想法?我使用的数据集非常大,因此多次查询和后期处理需要很长时间(这就是我目前正在进行的操作)。

由于

2 个答案:

答案 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