2017-01-21 13 views
1

Google Big Queryの値を前方一致にするウィンドウ関数を使用するのが難しいです。クエリのIGNORE部分が問題を引き起こしているようです。以下のデータセットを前提とすると、別の有効な購入日に遭遇するまでヌルを記入するために各社会保障番号の「購入日」の値を取得しようとしています。基本的に、各activity_dateに関連して最新の購入日を記録しておきたい。Google Big Query:フォワードフィリング:IGNORE in Window関数

たとえば、SS番号000-0000-000を見て、2016-12-16に、活動日2016-12-17から2016-12-22の間のすべてのNULL値を入力してください(購入年齢1-6)を購入し、購入年齢が8-10歳の場合は、前払い2016-12-23を記入してください。他のSS#111-1111-111と同じシナリオ。ここで

Activity_date SS_Number First_Purchase First_Purchase_age Purchase_dates 
2016-12-26 000-0000-000 2016-12-16 10 null 
2016-12-25 000-0000-000 2016-12-16 9 null 
2016-12-24 000-0000-000 2016-12-16 8 null 
2016-12-23 000-0000-000 2016-12-16 7 2016-12-23 
2016-12-22 000-0000-000 2016-12-16 6 null 
2016-12-21 000-0000-000 2016-12-16 5 null 
2016-12-20 000-0000-000 2016-12-16 4 null 
2016-12-19 000-0000-000 2016-12-16 3 null 
2016-12-18 000-0000-000 2016-12-16 2 null 
2016-12-17 000-0000-000 2016-12-16 1 null 
2016-12-16 000-0000-000 2016-12-16 0 2016-12-16 
2016-11-26 111-1111-111 2016-11-16 10 null 
2016-11-25 111-1111-111 2016-11-16 9 null 
2016-11-24 111-1111-111 2016-11-16 8 null 
2016-11-23 111-1111-111 2016-11-16 7 2016-11-23 
2016-11-22 111-1111-111 2016-11-16 6 null 
2016-11-21 111-1111-111 2016-11-16 5 null 
2016-11-20 111-1111-111 2016-11-16 4 null 
2016-11-19 111-1111-111 2016-11-16 3 null 
2016-11-18 111-1111-111 2016-11-16 2 null 
2016-11-17 111-1111-111 2016-11-16 1 null 
2016-11-16 111-1111-111 2016-11-16 0 2016-11-16 

は、私が持っているクエリです:あなたは、他の例で

#standardSQL 
SELECT 
    activity_date, 
    ss_number, 
    first_purchase, 
    first_purchase_age, 
    purchase_dates, 
    MAX(purchase_dates) OVER (PARTITION BY ss_number ORDER BY activity_date 
          ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 
) AS filled_purchase_dates 
FROM yourTable 

上記の「回避策」あなたの特定のユースケースのために働くと述べたが、何あなたを与える以下

SELECT 
    activity_date, 
    ss_number, 
    first_purchase, 
    first_purchase_age, 
    purchase_dates, 
    LAST_VALUE(purchase_dates) IGNORE NULLS OVER (PARTITION BY ss_number ORDER BY activity_date DESC ROWS BETWEEN UNBOUNDED PRECEEDING AND CURRENT ROW), 
FROM 
    [TABLE] 

答えて

4

することができますより多くのコーディングを必要とするので、IGNORE NULLSはまだ素晴らしいでしょう!
窓機能のIGNORE現在 - Support IGNORE NULLS/RESPECT NULLS for analytic and aggregate functionsチケットを参照してください。予想される構文は

SELECT LAST_VALUE(x IGNORE NULLS) OVER (...) FROM yourTable 
+0

です。見ていただきありがとうございます!それは有り難いです。 – echoecho256

関連する問題