簡體   English   中英

MySQL查詢在移動DATE期間檢索DISTINCT COUNT

[英]MySQL query to retrieve DISTINCT COUNT between moving DATE period

我正在嘗試編寫一個查詢,該查詢返回每個日期之前7天的日期列表和DISTINCT COUNT個用戶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日之間DISTINCT用戶ID的數量,第24和第24日之間的第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計數。

此查詢應該適合您:

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以查看此查詢的實際效果。

嘗試:

Select Distinct Date(A.Started), Count(B.UserId)
From Session a
    Join Session b 
        On b.Start Between AddDate(A.Start, day, -7) And A.Start

我不是MySQL人,所以語法可能不正確,但模式可行....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM