2013-07-25 49 views
2

这是一个简单的问题,但我无法找到答案。COUNT-SQL如何识别重复

我的方案是我有一个应用程序,用户正在下载它,数据库捕获用户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 

我应该添加到上面的查询中。

回答

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 
) 

要找到的第一个星期,当用户下载的应用程序:

SELECT MIN(downld_time) where usr_id='A' 
+1

你需要改变“WHERE downld_time <> 5“到”WHERE downld_time <5“ – nnichols

+0

@nnichols:感谢您的更正,完成。 –

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没有之前的表格中的条目。