Google Big Query:转发填充:窗口函数中的IGNORE

ech*_*256 2 sql analytics google-bigquery

我在使用窗口函数在Google Big Query中"转发填充"值时遇到了困难.似乎查询的IGNORE部分导致了问题.假设下面的数据集,我试图获取每个社会安全号码的"购买日期"值以填写空值,直到遇到另一个验证购买日期.基本上希望跟踪与每个activity_date相关的最新购买日期.

例如,查看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
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

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]
Run Code Online (Sandbox Code Playgroud)

Mik*_*ant 6

下面给出了你描述的内容

#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
Run Code Online (Sandbox Code Playgroud)

以上"解决方法"适用于您的特定用例,但在其他情况下可能需要更多编码,因此IGNORE NULLS的功能仍然很棒!
因此,IGNORE在Window函数中 - 请参阅支持IGNORE NULLS/RESPECT NULLS以获取分析和聚合函数票证.预期的语法是

SELECT LAST_VALUE(x IGNORE NULLS) OVER (...) FROM yourTable
Run Code Online (Sandbox Code Playgroud)