同じ MySQL DB に 2 つのテーブルがあるとします。
1 つ目は inbound_campaign_visit テーブルです。このように見えます。
+----+-----------------------+------------------+------------- ------+ | | ID | ユーザー ID | インバウンドキャンペーン | 日付 | +----+-----------------------+------------------+------------- ------+ | | 1 | 1 | 1 | 2013-02-18 13:00:00 | | | 2 | 1 | 2 | 2013-02-24 13:00:00 | | | 3 | 2 | 3 | 2013-01-01 01:00:00 | | | 4 | 2 | 2 | 2013-02-24 19:00:00 | +----+-----------------------+------------------+------------- ------+
ユーザーがプロモーション キャンペーンをクリックしてサイトにアクセスするたびに、このテーブルの行が生成されます。「日付」列は、サイトにアクセスした時刻を表します。
2 番目のテーブルは私のトランザクション テーブルです。
+--------+---------------------+---------------------+ | | ID | ユーザー ID | 作成日 | +--------+---------------------+---------------------+ | | 321639 | 1 | 2013-02-18 14:00:00 | | | 321640 | 1 | 2013-02-24 15:00:00 | | | 321641 | 1 | 2013-02-25 13:00:00 | | | 321642 | 1 | 2013-04-05 12:00:00 | | | 321643 | 2 | 2013-01-01 12:00:00 | | | 321644 | 2 | 2013-02-23 12:00:00 | +--------+---------------------+---------------------+
このテーブルの行は、トランザクションが発生するたびに作成されます。「creation_date」列は、トランザクションが発生した時刻を表します。
インバウンド キャンペーンごとのトランザクション数をカウントするレポートを作成したいと考えています。次の規則を適用する必要があります。
- user_id 値がトランザクションの値と一致し、inbound_campaign_visit 行が作成されてから 30 日以内にトランザクションが発生した場合、トランザクションはインバウンド キャンペーンに関連していると見なされます。
- トランザクションは、特定のユーザーの最新のインバウンド Campaign_visit にのみ適用できます。
結果テーブルは次のようになります。
+------------------+----------------------------------+ | | インバウンドキャンペーン | トランザクション数 | +------------------+----------------------------------+ | | 1 | 1 | | | 2 | 2 | | | 3 | 1 | +------------------+----------------------------------+
トランザクション 321644 と 321642 はルール 1 に違反しているため、カウントされないことに注意してください。また、トランザクション 321641 が inbound_campaign 2 にのみ適用され、inbound_campaign 1 には適用されないことにも注意してください (両方のキャンペーンがルール 1 で定義された 30 日間の制限内にあるにもかかわらず)。
私はしばらくの間これに苦労してきましたので、どんな助けもいただければ幸いです。もちろん、コードでこれを行うこともできますが、SQL でこれを行う方法が必要です。ティア。