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