2017-01-21 56 views
1

我有困難使用窗口函數來「轉發」谷歌大查詢填充值。看起來查詢的IGNORE部分導致了問題。假設下面的數據集,我試圖獲取每個社會安全號碼的「購買日期」值,以填充空值直到遇到另一個驗證購買日期。基本上要跟蹤與每個activity_date相關的最新購買日期。谷歌大查詢:前進填充:IGNORE在窗口功能

例如,查看SS#000-0000-000,我想2016-12-16轉發填充活動日期2016-12-17至2016-12-22之間的所有空值(購買年齡1-6),然後在2016-12-23前購買8-10歲的購買者。對於其他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 

下面是該查詢我:

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

下面給你你所描述的

#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 

上面「解決辦法」適用於您的具體使用情況,但在其他情況下,可以需要更多的編碼,IGNORE NULLS的能力仍然很棒!
因此,截至IGNORE的Window Function - 請參閱Support IGNORE NULLS/RESPECT NULLS for analytic and aggregate functions門票。預期的語法是

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

米哈伊爾非常感謝您的關注!我很感激。 – echoecho256