-1

ここで問題が発生しました。これは、日付ごとに 30 日間の非キュー ユーザーの合計を計算する必要があるということです。つまり、今日の場合は、今日から 30 日間の範囲の一意の合計であり、昨日は昨日から 30 日間の範囲などです。テーブル構造は次のとおりです。

date        uid   visits
27-06-2013   11     40
27-06-2013   14     40
26-06-2013   13     45
25-06-2013   11     20
24-06-2013   12     40

このように続きます。私が必要とするのは、毎日の合計です。

4

3 に答える 3

0

次のような単純なもので問題なく動作するはずです。

SELECT
    `date`,
    COUNT(DISTINCT `uid`) as `unique_visits`
FROM
    `foo`
WHERE
    `date` >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY
    `date`

SQLFiddle デモ

于 2013-07-02T10:33:57.510 に答える
0

私があなたの質問を正しく読み、日付フィールドのデータ型が日付であると仮定すると、おそらく次のようなものです:-

SELECT Sub1.EndDate, COUNT(DISTINCT a.uid)
FROM SomeTable a
INNER JOIN
(
    SELECT DISTINCT date AS EndDate, DATE_SUB(date, INTERVAL 30 DAY) AS StartDate
    FROM SomeTable
) Sub1
ON a.date BETWEEN Sub1.StartDate AND Sub1.EndDate

これは、副選択を使用して 30 日の各範囲を取得し、それをテーブルに結合してその日付範囲のすべてのレコードを取得し、個別のカウントを行ってすべての個別のユーザーを見つけます。

于 2013-07-02T10:37:07.430 に答える