3

日付のリストと、各日付の前の 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 カウントが必要です。

4

2 に答える 2

1

このクエリはあなたのために働くはずです:

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にアクセスして、このクエリの動作を確認してください。

于 2012-09-28T00:47:26.203 に答える
-1

試す:

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 の専門家ではないので、構文が正しくない可能性がありますが、パターンは機能します....

于 2012-09-28T00:10:34.350 に答える