2016-10-21 8 views
-1

に参加して、LAG:のBigQuery/SQL:SELFを使用してデータセットの変換は、私は次のようにダミーのデータセットと同様の入力データセット持って

date  time  userid channel transaction 
20161012 12:00:00 1  seo  0 
20161018 16:50:00 1  referral 1 
20161011 09:20:00 2  sea  0 
20161020 12:20:00 2  direct  0 
20161020 20:40:00 2  facebook 0 
20161021 11:35:00 2  direct  1 
20161019 01:05:00 3  seo  0 
20161020 24:20:00 3  sea  1 
20161021 06:20:00 4  direct  1 

を私は次の出力データセットを取得したいと思います:

userid channel1 channel2 
1  seo  referral 
1  referral transaction 
2  sea  direct 
2  direct facebook 
2  facebook direct 
2  direct transaction 
3  seo  sea 
3  sea  transaction 
4  direct transaction 

言い換えれば、私は顧客の旅でお互いに続くチャネル間のすべてのステップを記録するデータセットを作成したいと思います。出力データセット内でトランザクションがチャネルとみなされることを示します。

私は(自分自身の)JOINLAGを使用して、このような何かを達成することができるかもしれないことを知っているが、私はそれを動作させることができないよ...これを取得するために簡単な解決策を知っている

誰でも出力データセット?

ありがとうございます!

+0

SOの重要な点 - 投稿された回答の左側のチェックボックスの下にあるチェックマークを使用して、「受け入れられた回答をマークする」ことができます。重要な理由については、http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235を参照してください。答えに投票することも重要です。役に立った答えを投票してください。もっとたくさんあります...誰かがあなたの質問に答えるときに何をすべきかを確認することができます - http://stackoverflow.com/help/someone-answers。 –

+0

フィードバックに感謝@MikhailBerlyant。しかし、私はあなたの答えを私の最終的な解決策に使っていません。それが私があなたの答えを受け入れなかった理由です。 – Tomas

答えて

2

BigQueryのレガシーSQLは、BigQueryの標準SQLのための真の同じLAG()LEAD()

含む支持Window functionsを行う - Analytic Functionsを参照してください、だけでなく、Enabling Standard SQLMigrating from legacy SQL

はあなたの選択

SELECT 
    userid, channel1, IFNULL(channel2, "transaction") AS channel2, transaction 
FROM (
    SELECT 
    userid, DATE, TIME, transaction, channel AS channel1, 
    LEAD(channel) OVER(PARTITION BY userid ORDER BY DATE, TIME) AS channel2 
    FROM YourTable 
// ORDER BY userid, DATE, TIME 
のBigQueryの方言で下記お試しください
関連する問題