0

30 日間のユニーク アカウントの合計数を計算したいと思います。私が MySQL (InfiniDB) で使用しているエンジンは、等値条件でのテーブルの結合のみをサポートしているようです。

私のテーブルは次のようになります。

sessions (date_id, account_id) =
{ '2013-07-07', 5
  '2013-07-07', 5
  '2013-07-07', 1
  '2013-07-08', 3
  '2013-07-09', 3
}

私の現在のクエリは次のようになります。

SELECT
  date_id, (
    SELECT COUNT(DISTINCT account_id)
    FROM sessions t2
    WHERE t2.date_id BETWEEN DATE_SUB(t1.date_id, INTERVAL 30 DAY) AND t1.date_id
  ) cnt
FROM sessions t1
GROUP BY date_id

等結合のみがサポートされているため、BETWEEN演算子はテーブルを結合するために機能しません。

どんな助けでも大歓迎です:)

4

2 に答える 2

0

InfiniDB 4.0 を開始すると、ウィンドウ関数を使用してそのような計算を行うことができます。クエリは次のようになります。

SELECT date_id, COUNT(act_id)  AS Uniques
FROM ( SELECT date_id, 
              DISTINCT(account_id) OVER (PARTITION BY date_id RANGE INTERVAL 30 DAY PRECEDING) act_id
       FROM sessions ) t1
GROUP BY date_id

これにより、期待される結果が得られます

于 2014-04-15T01:43:53.117 に答える