我正在尝试编写一个查询,该查询返回每个日期前 7 天的日期列表和用户 ID 的 DISTINCT COUNT。我正在使用的表很简单,如下所示:
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 日之间 DISTINCT 用户 ID 的计数,24 日是 17 日到 24 日之间的计数,等等。
我尝试了以下查询,但它只提供每天的 COUNT:
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 计数。