MySQL 查询以检索移动 DATE 期间之间的 DISTINCT COUNT

标签 mysql sql count distinct between

我正在尝试编写一个查询,该查询返回日期列表和每个日期之前 7 天的用户 ID 的不同计数。我正在使用的表格很简单,看起来像这样:

Started                 UserId
"2012-09-25 00:01:04"   164382
"2012-09-25 00:01:39"   164382
"2012-09-25 00:02:37"   166121
"2012-09-25 00:03:35"   155682
"2012-09-25 00:04:18"   160947
"2012-09-25 00:08:19"   165806

我可以如下编写单个 COUNT 输出的查询:

SELECT COUNT(DISTINCT UserId)
FROM Session 
WHERE Started BETWEEN '2012-09-18 00:00' AND '2012-09-25 00:00';

但我想要做的是在表格中的每一天和它之前的 7 天输出这个 COUNT。澄清一下,9 月 25 日的值将是 18 日和 25 日之间的不同用户 ID 的计数,24 日是 17 日和 24 日之间的计数,等等。

我尝试了以下查询,但它只提供了每天的计数:

SELECT 
DATE(A.Started),
Count(DISTINCT A.UserId)
FROM Session AS A
WHERE DATE(A.Started) BETWEEN DATE(DATE_SUB(DATE(DATE(A.Started)),INTERVAL 7 DAY)) AND DATE(DATE(A.Started))
GROUP BY DATE(A.Started)
ORDER BY DATE(A.Started);

输出看起来像这样:

DATE(A.Started) "Count(DISTINCT A.UserId)"
2012-09-18          709
2012-09-19          677
2012-09-20          658
2012-09-21          556
2012-09-22          530
2012-09-23          479
2012-09-24          528
2012-09-25          480
...

但正如我所说,这些只是每日计数。最初我以为我可以只对 7 天的值求和,但这会使 DISTINCT 子句无效。 我需要给定日期之前每 7 天的 DISTINCT UserId 计数。

最佳答案

这个查询应该适合你:

SELECT
    DATE_FORMAT(d1.Started, '%Y-%m-%d') AS Started,
    COUNT(DISTINCT d2.UserID) Users
FROM
(
    SELECT
        DATE(Started) AS Started
    FROM
        Session
    GROUP BY
        DATE(Started)
) d1 
INNER JOIN
(
    SELECT DISTINCT
        DATE(Started) AS Started,
        UserID
    FROM
        Session
) d2
ON d2.Started BETWEEN d1.Started - INTERVAL 7 DAY AND d1.Started
GROUP BY
    d1.Started
ORDER BY
    d1.Started DESC

访问http://sqlfiddle.com/#!2/9339c/5查看此查询的运行情况。

关于MySQL 查询以检索移动 DATE 期间之间的 DISTINCT COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12631801/

相关文章:

sql - 如何估计 PostgreSQL View 的行数?

php - Parent 按子表数量排序

mysql - 我无法弄清楚这个查询

c# - 数据适配器与 SQL 命令

php - SELECT COUNT(*) AS count - 如何使用这个计数

MySQL 查询 : Counting duplicate values in a really huge table

mysql - 获取一行中的预览下一条记录

php - paypal 沙盒测试不返回自动和支付失败错误

SQL:查询帮助

SQL Server 2000 与 SQL Server 2008 查询性能