COUNT-SQL如何识别重复

时间:2013-07-25 00:00:46

标签: mysql 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

我应该在上述查询中添加什么。

2 个答案:

答案 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在表中没有先前的条目。