2016-03-25 13 views
0

これは少し畳み込まれているように聞こえるかもしれませんので、私にご負担ください。イベント後に発生したレコードのみを表示する方法 - 。 Redshift/Postgresql -

私は2つのテーブルを持っています。

注文番号、storenumber、得意先、ordervalue、

他purchasedate多くの列を持っている私のマーケティングのイベントテーブルですが、私は使用しています:

一つは列があり、私の売上高は次のとおりです。

EVENTTYPE、subscriberkeyとEVENTDATE

私はこれが彼らの現在の構造

marketing.eventtype = sales.ordernumber、marketing.subscriberkey = sales.customeridとsales.purchasedate = marketing.eventdateである労働組合のテーブルを持っています。空の場合、注文額と店舗番号はnullです。

私は、イベントタイプまたは複数のイベントタイプの直後に来た販売を表示する必要があります。そのため、customerid/subscriberidによって注文されたリストの最後のレコードとして販売が表示されます。

また、特定の日付間のマーケティングイベントに限定し、販売日の変換のウィンドウを与えたいと考えています。

SELECT ordernumber, 
     storenumber, 
     customerid, 
     ordervalue, 
     purchasedate FROM table.sales oh 
WHERE purchasedate > '2016-01-16' 
     AND purchasedate < '2016-01-24' 
     AND ordervalue > 0 
     AND customerid IN (SELECT subscriberkey 
          FROM table.marketing 
          WHERE eventtype = 'Open' 
           AND eventdate < '2016-01-19' 
           AND eventdate > '2016-01-15') 
UNION 
SELECT eventtype  AS ordernumber, 
     NULL   AS storenumber, 
     subscriberkey AS customerid, 
     NULL   AS ordervalue, 
     eventdate  AS purchasedate 
FROM table.marketing 
WHERE eventtype = 'Open' 
     AND eventdate < '2016-01-19' 
     AND eventdate > '2016-01-15' 
     AND subscriberkey IN (SELECT customerid 
          FROM table.sales oh 
          WHERE purchasedate > '2016-01-16' 
            AND purchasedate < '2016-01-24' 
       ) 
ORDER BY customerid, 
      purchasedate ASC 
+0

「自然な販売」とマーケティングの隆起を比較したくないのですか?イベントの後に売り上げを数えるだけで、偏ったイメージが得られます。 – Guy

+0

コメントに感謝 - それはその一部になりますが、この作品のためではありません –

+0

これは何よりも帰属を見ることです –

答えて

0

"イベント"(サブクエリとして使用される)のクエリの結果を呼び出してみましょう。その後、マーケティングイベントの後に来た販売のみを表示するには、a window functionで行うことができます。

  1. まず、前の行の次の行からデータをコピーします。逆に注文し、私たちは販売の行にマーケティングデータをコピーします。

    SELECT LEAD(events.ordernumber, 1) OVER (PARTITION BY customerid ORDER BY purchasedate desc) as following_ordernumber, LEAD(events.purchasedate, 1) OVER (PARTITION BY customerid ORDER BY purchasedate desc) as following_purchasedate

    我々は顧客イベントのグループを分離している顧客によってグループ化することで、日付によって逆に注文して、我々は前方にのみ動作します(LEADを使用することができます)を使用してマーケティングデータを抽出し、それを販売行にコピーします。この新しいクエリを "enriched_sales"としましょう。

  2. その後、我々は販売イベント以外のすべてを除外する:

    WHERE enriched_sales.ordernumber != 'Open' and enriched_sales.following_ordernumber = 'Open'

    を逆の順序で、我々はすぐにマーケティングの列が続いている販売行をしたいです。このようなマーケティング行からデータをコピーした後、販売行の注文番号は「開く」ではなく、コピーされた値は「開く」になります。

  3. 最後に、我々は変換ウィンドウを計算するために日付を使用:あなたはテーブル定義および入力/出力データを投稿する場合、私は、全体のクエリを生成することができます

    SELECT datediff(days, following_purchasedate, purchasedate) ...

、うまくいけばあなたアイデアを得る。

関連する問題