5

マルチタッチ アトリビューションを確認するために解析したいデータ セットがあります。データ セットは、マーケティング キャンペーンに反応したリードとそのマーケティング ソースによって構成されます。

各見込み客は複数のキャンペーンに対応でき、最初のマーケティング ソースと最後のマーケティング ソースを同じテーブルに取得したいと考えています。

2 つのテーブルを作成し、両方から select ステートメントを使用できると考えていました。最初のテーブルは、すべての人からの最新のマーケティング ソースを含むテーブルを作成しようとします (電子メールを一意の ID として使用)。

create table temp.multitouch1 as (
select distinct on (email) email, date, market_source as last_source 
from sf.campaignmember
where date >= '1/1/2016' ORDER BY DATE DESC);

次に、重複排除されたメールを含むテーブルを作成しますが、今回は最初のソース用です。

create table temp.multitouch2 as (
select distinct on (email) email, date, market_source as first_source 
from sf.campaignmember
where date >= '1/1/2016' ORDER BY DATE ASC);

最後に、単純にメールを選択し、最初と最後のマーケット ソースをそれぞれ独自の列に結合したいと考えました。

select a.email, a.last_source, b.first_source, a.date 
from temp.multitouch1 a
left join temp.multitouch b on b.email = a.email

個別の on は redshift の postgresql バージョンでは機能しないため、誰かがこの問題を別の方法で解決するアイデアを持っていることを望んでいました。

編集 2/22: より多くの文脈のために、私は人々と彼らが反応したキャンペーンを扱っています. 各レコードは「キャンペーン レスポンス」であり、すべての人が複数のソースを持つ複数のキャンペーン レスポンスを持つことができます。人ごとに重複を排除し、最初に応答したキャンペーン/マーケティング ソースと、最後に応答したキャンペーン/マーケティング ソースの列をそれぞれ持つ select ステートメントを作成しようとしています。

EDIT 2/24: 理想的な出力は、email、last_source、first_source、date の 4 つの列を持つテーブルです。

最初と最後のソース列は、キャンペーン メンバー レコードが 1 つだけの場合は同じですが、キャンペーン メンバー レコードが 2 つ以上ある場合はすべて異なります。

4

2 に答える 2

0

古き良き左結合グループごとの最大値を使用できます。

SELECT DISTINCT c1.email, c1.date, c1.market_source
FROM sf.campaignmember c1
  LEFT JOIN sf.campaignmember c2 
    ON c1.email = c2.email AND c1.date > c2.date AND c1.id > c2.id
  LEFT JOIN sf.campaignmember c3
    ON c1.email = c3.email AND c1.date < c3.date AND c1.id > c3.id
WHERE c1.date >= '1/1/2016' AND c2.date >= '1/1/2016'
      AND (c2.email IS NULL OR c3.email IS NULL)

(date, email) が一意の ID である場合、これは一意の ID 列を持っていることを前提としています。

于 2016-02-22T18:31:07.143 に答える