帮助上一个SQL查询
我有一个名为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)
);
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})
需要分类。如果在创建时没有填充,那么只有SELECT * FROM activity WHERE的时候IS为null。但我不确定这是否是你的意思。
@flex:我更新了,希望现在更清楚 – Amirshk 2009-11-23 21:52:08
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天,以多久。
这不仅会计算*新用户,我认为... – fretje 2009-11-23 21:50:09
我认为@curtisk有正确的答案。 – fretje 2009-11-23 21:53:14
是。那就对了。我正准备发布。 – theShingles 2009-11-23 21:54:16
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))
应该这样做。
我想你想要的是:
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。
您希望在上周内新注册的用户数或上周内所有用户的数量。 – 2009-11-23 21:48:26
@Mark:只有新用户。 – Amirshk 2009-11-23 21:50:51