使用下一个非空值 bigquery 填充空值

vis*_*ank 1 google-bigquery

我有下表,其中包含 BigQuery 中的 GA 数据

userid  visitid purchase_date
GH8932  12345   2017-04-09
GH8932  12346   null
GH8932  12347   null
GH8932  12348   null
GH8932  12349   2017-05-30
GH8932  12350   null
GH8932  12351   null
GH8932  12352   2017-06-07
GH8932  12353   null
GH8932  12354   2017-06-30
Run Code Online (Sandbox Code Playgroud)

我希望结果表是

userid  visitid purchase_date
GH8932  12345   2017-04-09
GH8932  12346   2017-05-30
GH8932  12347   2017-05-30
GH8932  12348   2017-05-30
GH8932  12349   2017-05-30
GH8932  12350   2017-06-07
GH8932  12351   2017-06-07
GH8932  12352   2017-06-07
GH8932  12353   2017-06-30
GH8932  12354   2017-06-30
Run Code Online (Sandbox Code Playgroud)

我尝试了以下

select
a.userid,
a.visitid,
b.purchase_date
from x
left join
( 
select 
userid,
visitid,
purchase_data 
from x 
where purchase_date is not null) as b
on x.userid = b.userid
where x.visitid <= b.visitid
Run Code Online (Sandbox Code Playgroud)

但是,这并没有提供我正在寻找的解决方案。

感谢对BQ菜鸟的帮助

Ell*_*ard 7

使用 IGNORE NULLS 和 FIRST_VALUE 在所需窗口中查找非空日期:

SELECT
  userid,
  visitid,
  FIRST_VALUE(purchase_date IGNORE NULLS) OVER (
    PARTITION BY userid ORDER BY visitid
    ROWS BETWEEN CURRENT ROW AND
    UNBOUNDED FOLLOWING) AS purchase_date
FROM x;
Run Code Online (Sandbox Code Playgroud)