sql - 谷歌大查询 : Forward Filling: IGNORE in Window Function

标签 sql google-bigquery analytics

我在使用窗口函数在 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/

相关文章:

sql - 左连接的替代方案

google-bigquery - BigQuery 性能

google-bigquery - 如何更改 BigQuery 重复记录的列类型

sql - 在两个日期上排名 - 每个日期迭代

sql - 内部联接创建重复记录

php - 命中计数器sql错误

sql - Max(char) 是如何工作的?

google-bigquery - Google BigQuery 中的参数化查询出错

google-analytics - 如何开始使用大数据和 Web 分析

postgresql - Postgres 中分析表的架构