这是一个简单的问题,但我无法找到答案。
我的方案是我有一个应用程序,用户正在下载它,数据库会捕获用户ID,他们下载的周和他们下载的版本。
这是我的表结构
downld_time| downld_version| usr_id
00 0.5 A
00 0.5 B
00 0.5 C
2 1 E
2 1 F
3 1.2 F
4 1.2 E
5 1.2 A
很容易找到使用此查询下载我的应用的用户数
SELECT COUNT(DISTINCT usr_id)
FROM download
WHERE 1
现在我的问题是,如果我想向下钻取并查看在第5周下载的新用户数,我应该将计数设为0,因为用户A已在第0周下载了应用并且不是新用户
我还需要知道用户A首次下载他的应用程序的那一周。
SELECT COUNT(DISTINCT usr_id)
FROM download
WHERE `downld_time`=5
我应该在上述查询中添加什么。
答案 0 :(得分:1)
尝试此操作以查找在第5周第一次下载应用的用户:
SELECT COUNT(DISTINCT usr_id)
FROM download
WHERE downld_time=5 and usr_id not in (
SELECT usr_id
FROM download
WHERE downld_time < 5
)
查找用户A下载应用的第一周:
SELECT MIN(downld_time) where usr_id='A'
答案 1 :(得分:0)
要查找给定周的新用户数,您可以使用以下内容 -
SELECT COUNT(DISTINCT `d1`.`usr_id`)
FROM `download` `d1`
LEFT JOIN `download` `d2`
ON `d1`.`usr_id` = `d2`.`usr_id`
AND `d1`.`downld_time` > `d2`.`downld_time`
WHERE `d1`.`downld_time` = 5
AND `d2`.`usr_id` IS NULL
这里的想法是根据usr_id将下载表加入到自身中,其中usr在表中没有先前的条目。