2009-11-23 56 views
0

我有一个名为activity 2列的表:帮助上一个SQL查询

when as datetime // last time i saw a user 
guid as varchar // a unique identifier for each user 

这个表是用来在一定的资源来跟踪使用情况。 Guid由客户创建。

我希望能够查询最近一天/每周/每月有多少新用户。 新用户由第一次出现在活动表中的​​标识。

如何在单个SQL语句中执行此操作?

更新: 该表包含每次用户使用该资源时的条目。所以如果他用了5次,就会有5排。 直到用户使用该资源,我没有他的指导,他没有表中的条目。

结果

谢谢大家,它帮助了很多。对于任何感兴趣的人来说,这是我从你所有的建议中编译的内容:

SET @duration=7; 
SELECT COUNT(distinct guid) AS total_new_users FROM `activity` 
    WHERE `when` >= DATE_SUB(CURDATE(),INTERVAL @duration DAY) AND guid NOT IN 
    (
     SELECT guid 
     FROM `activity` 
     WHERE `when` < DATE_SUB(CURDATE(),INTERVAL @duration DAY) 
    ); 
+0

您希望在上周内新注册的用户数或上周内所有用户的数量。 – 2009-11-23 21:48:26

+0

@Mark:只有新用户。 – Amirshk 2009-11-23 21:50:51

回答

4
select count(guid)as total_new_users 
from activity 
where when >= {last day/week/month} 
and guid not in(select guid 
from activity 
where when < {last day/week/month}) 
0

需要分类。如果在创建时没有填充,那么只有SELECT * FROM activity WHERE的时候IS为null。但我不确定这是否是你的意思。

+0

@flex:我更新了,希望现在更清楚 – Amirshk 2009-11-23 21:52:08

1
SELECT COUNT(DISTINCT guid) 
FROM activity 
WHERE guid NOT IN (
    SELECT DISTINCT guid FROM activity WHERE when < CURDATE() - INTERVAL 7 DAYS 
) 
AND when BETWEEN CURDATE() AND CURDATE() - INTERVAL 7 DAYS; 

改变了7天,以多久。

+1

这不仅会计算*新用户,我认为... – fretje 2009-11-23 21:50:09

+0

我认为@curtisk有正确的答案。 – fretje 2009-11-23 21:53:14

+0

是。那就对了。我正准备发布。 – theShingles 2009-11-23 21:54:16

0
SELECT COUNT(DISTINCT guid) 
FROM ACTIVITY 
WHERE when BETWEEN CURDATE() AND CURDATE() - INTERVAL 7 DAYS 
    AND guid NOT IN (SELECT distinct GUID FROM ACTIVITY WHERE when < (CURDATE() -7 DAYS)) 

应该这样做。

2

我想你想要的是:

select count(*) from (
    select guid,min(when) as first from activity group by guid 
    having first between curdate()-interval 7 day and curdate()) 

你要查询整个表,否则人们将算作新的过程中所涉及的时间段他们的第一次访问。这个查询找到每个GUID第一次被看到,然后过滤掉那些不在这个时间段内的GUID。

+0

@Jim:有趣的做法!添加表虽然 – curtisk 2009-11-23 21:58:35

+0

我认为我的MySQL太旧了,它不能使用'DAYS'关键字。 (版本4.1.22)。 – Amirshk 2009-11-23 22:11:45

+0

@Jim:我喜欢HAVING这个用法。对于+1,请更正语法,将表添加为curtisk询问(“FROM activity”)并将INTERVAL单位(“7天”)单独化。 – pilcrow 2009-11-23 22:25:28