次のようなテーブルがあります:
<表类=“s-表”> <标题> idタイムスタンプ###Eメール###ip###イベント###1 标题> <正文> 2021-07-15 00:01:00demo@demo.com11.11.11.11###登録する###22021-07-15 00:04:00demo@demo.com11.11.11.11###買う###32021-07-15 00:07:00test@test.com22.22.22.22###登録する###42021-07-15 00:08:00someone@else.com33.33.33.33###登録する###52021-07-16 00:01:00test@test.com22.22.22.22###買う###62021-07-16 00:02:00someone@else.com33.33.33.33###買う###すべてのユーザーの電子メール、IP、日付/時刻、イベント (登録と購入) を追跡します。現在、a) サインアップと b) コンバージョン (サインアップから 7 日以内に発生した購入。購入日ではなく、そのメール/IP に割り当てられた元のサインアップ日) に関する毎日の統計を取得しようとしています。a) 登録については簡単に理解できましたが、7 日以内のコンバージョンをクエリして、各登録コンバージョンを登録日 (コンバージョン日ではなく、簡単です) に割り当てる方法を理解しようとすると、次のようになります。これはかなりの挑戦です。これはこれまでの私のクエリです:リーリーこれにより、次の結果が得られます:###日付### ###登録する### ###変換### 2021-07-153
1 2021-07-16 <表类=“s-表”> <标题> 02私が理想的に必要とするのは次のようなものです (15 日の 3 つの登録イベントに 3 つの購入イベントが関連付けられているため、15 日に 3 つのコンバージョンが割り当てられ、16 日に割り当てられないのはなぜですか): 标题> <正文> ###日付### ###登録する### ###変換###2021-07-15332021-07-1600 <表类=“s-表”> <标题> それは意味がありますか?この click_tracking テーブルのサイズは 100 万レコードまたは 2 レコードであり、クラッシュさせるために何度も JOINS を試みました。そのため、どんなクエリでも機能するわけではありません...この問題を効率的に解決し、このタスクを達成するためにクエリを変更する方法はありますか? 标题> 表类=“s-表”> 正文> 表类=“s-表”> 正文> 表类=“s-表”>
この種のクエリを実行するにはウィンドウ関数が必要です:
リーリー各電子メールの最初のレコードが常に
Registration
であり、2 番目のレコード (存在する場合) が常にPurchase
であると仮定すると、電子メールのタイプと日付レコードが取得されます。最初の 2 レコードを一度に。その後、2 つのイベントの間に 7 日以上の間隔が空かないように追加のフィルターを適用しながら、サインアップと購入を別々に簡単にカウントできます。timestamp
にキーがある場合、クエリは 100 万行でも十分に高速になるはずです。