0

とりわけ、顧客と顧客とのやり取りを追跡するための複数のテーブルを持つデータベースがあります。PHP を使用してレポートを作成しています。このレポートには、オープン ステータスがあり、過去 2 週間にインタラクションが記録されていないすべての顧客が表示されます。私はクエリを実行しようとしましたが、それらの結果を処理している間に、それに基づいて別のクエリを実行しましたが、非常に遅く、正しく動作させることができませんでした. JOIN 関数が私の答えだと思いますが、実装方法が完全にはわかりません。

私のテーブルには次のフィールドがあります:

customers: customer_id
customers_marketing_options: customer_id, status
customer_interactions: customer_id, created_on (yyyy-mm-dd hh:mm:ss)

現在、ステータスがオープンのすべての顧客を選択しています。次に、これらの結果を使用して、その顧客 ID を持つすべてのインタラクションを選択します。created_on は最大で 2 週間前であり、created_on の日付で並べ替え、一番上の行 (最新のインタラクション) を選択します。ただし、ウォーム ステータスの顧客のインタラクションが返されます。ただし、過去 2 週間にやり取りがあったかどうかはチェックされません。

これはおそらく混乱を招くように聞こえるかもしれませんが、ヘルプやガイダンスをいただければ幸いです。

4

3 に答える 3

1
SELECT cmo.customer_id,
       Max(ci.created_on) as last_interaction
FROM customer_marketing_options cmo
     inner join customer_interactions ci
     on cmo.customer_id = ci.customer_id
WHERE
  cmo.status = 'open'
GROUP By
  cmo.customer_id
HAVING Max(ci.created_on) < DATE_SUB(CURDATE(),INTERVAL 14 DAY)
于 2012-11-15T19:49:30.177 に答える
1
SELECT customer_ID, created_on
FROM customer_interactions
WHERE MAX(created_on) <= (now() - INTERVAL 2 week)
  AND ... status stuff ...
GROUP BY customer_ID
于 2012-11-15T19:50:00.440 に答える
0

これを試してみてください:

SELECT ci.customer_id, ci.created_on FROM customer_interactions ci
LEFT JOIN customer_interactions ci2
  ON (ci.customer_id = ci2.customer_id AND ci.created_on < ci2.created_on)
JOIN customers_marketing_options cmo
  ON (ci.customer_id = cmo.customer_id AND status = 'Open')
WHERE ci2.created_on IS NULL AND ci.created_on < now() - interval 2 week

ここで実際の例を確認してください。

于 2012-11-15T20:02:52.790 に答える