2017-07-05 15 views
0

私はさまざまなタイプのイベント、イベントが発生した時間、イベントが関連付けられているユーザーのリストを持っています。イベントAはユーザーごとに1回しか発生しませんが、イベントBは複数回発生する可能性があります。BigQuery UDFで別のテーブルの最大値を見つけよう

Raw Data

、私はこれにそれを有効にする:次のように

Processed Data

ロジックは次のとおりです。

  1. 私は時間のリストを抽出するために、テーブルを照会しますイベントAが各ユーザーに発生しました
  2. 各行について、最初のポイントは十分に簡単であるイベントBがイベントの前に

を発生し、私は動けなく

SELECT User, Time AS Event_A_Time FROM Raw_Data WHERE Event = 'Event A' 

の線に沿って何かは、3番目の列を取得する方法を取り組んでいます。これは、(標準SQLを使用して)私はこのためにUDFを使用する必要があると仮定していますが、私は、構文にこれをフィットする方法に苦しんだ

SELECT MAX(Time) FROM Raw_Data WHERE Time < [Event_A_Time for this user] 

のようなものにする必要があります。どんな助けにも感謝!

答えて

1

この種の計算にはUDFは必要ありません。試してみてください:

SELECT * EXCEPT(Event_B_Times), 
    (SELECT MAX(time) FROM UNNEST(Event_B_Times) AS Time 
    WHERE Time < Event_A_Time) AS Event_B_Time 
FROM (
    SELECT 
    User, 
    MAX(IF(Event = 'Event A', Time, NULL)) AS Event_A_Time, 
    ARRAY_AGG(IF(Event = 'Event B', Time, NULL) IGNORE NULLS) AS Event_B_Times 
    FROM Raw_Data 
    GROUP BY User 
); 
+0

ありがとうございます。私が理解していることから、それはEvent_A_Timeよりも高いか低いかにかかわらず、私に最大Event_B_Timeを与えますか? – apkdsmith

+0

申し訳ありませんが、私は誤解しました。この編集が動作するかどうか確認できますか? Bの最大時間はAの時間よりも短くなっています。 –

+0

ありがとう、本当に役に立ちます:) – apkdsmith

関連する問題