我在使用窗口函数在 Google Big Query 中“转发填充”值时遇到了困难。查询的 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]
最佳答案
下面给你你所描述的
#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
在窗口函数中 - 见 Support IGNORE NULLS/RESPECT NULLS for analytic and aggregate functions票。预期的语法是SELECT LAST_VALUE(x IGNORE NULLS) OVER (...) FROM yourTable
关于sql - 谷歌大查询 : Forward Filling: IGNORE in Window Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782630/