我有下表,其中包含 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菜鸟的帮助
使用 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)
| 归档时间: |
|
| 查看次数: |
3696 次 |
| 最近记录: |