2

这是一个简单的问题,但我无法找到答案。

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

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

4

2 回答 2

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'
于 2013-07-25T00:28:37.727 回答
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 在表中没有先前的条目。

于 2013-07-25T00:28:01.183 回答