MySQL には、ユーザーの「アクション」を記録するテーブルがあります (アクションは、クリック、購入など、いくつでもかまいません)。テーブルは次のようになります。ここで、action_id は一意です。
+--------------------------------------------+
| table_actions |
+--------------------------------------------+
| action_id | user_id | date_created |
+-----------+---------+----------------------+
| 1 | 321 | 2011-01-21 06:00:00 |
+-----------+---------+----------------------+
| 2 | 123 | 2011-02-21 06:00:00 |
+-----------+---------+----------------------+
| 3 | 456 | 2011-03-21 06:00:00 |
+-----------+---------+----------------------+
| 4 | 654 | 2011-04-21 06:00:00 |
+--------------------------------------------+
30 か月の日付範囲内で 1 年以内に 3 つのアクションを実行した個別の user_id の数を見つけたいと考えています。私の最初の試みはこれでした:
select ta.user_id
from table_actions ta
where ta.date_created > DATE_SUB(now(),interval 30 month)
group by ta.user_id
having COUNT(ta.action_id) > 2 AND DATEDIFF(MAX(ca.created_at),MIN(ca.created_at)) > 364;
これは問題なく実行されますが、ユーザーの最初のアクションと最後のアクションの違いをチェックするだけでエラーが発生します。ユーザーの最初と最後のアクションが 30 か月離れているが、その期間のどこかで 3 日間で 3 つのアクションを実行した場合、クエリではカウントされません。
私の調査では、日付範囲に関するいくつかの投稿が見つかりましたが、範囲内の範囲内で特定の数の出現を探したものはありませんでした.
これには、何らかのループまたは行の番号付けが含まれる可能性があると想定していますが、すぐに私の知識の限界に達しました。
更新 1:
実際の例が役立つ場合:
Jane は、2010 年 3 月、2011 年 3 月、2011 年 4 月、2011 年 12 月に行動を起こします。
ジョンは、2010 年 1 月、2011 年 1 月、2011 年 2 月、2012 年 3 月に行動を起こします。
それぞれが過去 30 か月間に 3 つ以上のアクションを実行しましたが、過去 30 か月内の 12 か月間に 3 つ以上のアクションを実行したのはジェーンだけです。すべてのジェーンを返すクエリを探しています。
私が立ち往生しているのは、ユーザーが過去 30 か月間に任意の数のアクションを実行できるという事実を説明することです。アクションが 3 つだけに制限されている場合、これは簡単です。しかし、過去 30 か月間に 5 つのアクションを実行したユーザーを対象に、そのうち 3 つのアクションが 1 年間に発生したかどうかを確認する方法がわかりません。
うまくいけば、それが明確にするのに役立ちます。みんな、ありがとう。