Bigquery 表潜在客户列值基于日期

Posted

技术标签:

【中文标题】Bigquery 表潜在客户列值基于日期【英文标题】:Bigquery Table Lead Column Values Based On Date 【发布时间】:2019-02-23 08:08:15 【问题描述】:

我想复制一个(收入)列并将其移动一年,以便进行同比比较。目前希望根据特定日期在 Big Query 表中引导值以实现此目的,但卡住了。

我使用 DATE_ADD 创建了一个新列来获取去年的日期,但现在我想在它旁边获取一个列,其中包含基于 DATE_ADD 日期的收入。

一个问题是并非所有地点都包含相同的日期,这就是为什么更难进行转变的原因。

没有办法正确格式化表格,所以我在这里有一个预期结果的图像。其中receiver_last_year基本上应该填写date_add列对应的receiver列的值和正确的位置。

下面的查询是我所能做到的:

SELECT  
Date, 
location, 
revenue,
DATE_ADD(date, INTERVAL -1 YEAR) AS DateAdd,
LEAD(revenue, ##OFFSET## ) OVER (PARTITION BY location ORDER BY date DESC) AS revenue_last_year
FROM
`dataset.table1`

关于如何将偏移值与正确的日期联系起来,有人有什么建议吗?或者我应该以完全不同的方式处理这个问题?

【问题讨论】:

能否提供一些样本数据和预期结果? 嗨,马丁,我编辑了这篇文章以提供更多信息。如果还不够清楚,请告诉我。 【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT 
  a.date, a.location, a.revenue, 
  DATE_SUB(a.date, INTERVAL 1 YEAR) date_last_year, 
  IFNULL(b.revenue, 0) revenue_last_year 
FROM `project.dataset.table` a
LEFT JOIN `project.dataset.table` b
ON a.location = b.location
AND DATE_SUB(a.date, INTERVAL 1 YEAR) = b.date

你可以像下面的例子一样使用虚拟数据测试,玩上面的例子

#standardSQL
WITH `project.dataset.table` AS (
  SELECT DATE '2018-02-20' `date`, 'A' location, 1 revenue UNION ALL
  SELECT '2018-02-20', 'B', 2 UNION ALL
  SELECT '2018-02-21', 'A', 3 UNION ALL
  SELECT '2018-02-22', 'B', 4 UNION ALL
  SELECT '2019-02-20', 'A', 5 UNION ALL
  SELECT '2019-02-20', 'B', 6 UNION ALL
  SELECT '2019-02-21', 'A', 7 UNION ALL
  SELECT '2019-02-21', 'B', 8 UNION ALL
  SELECT '2019-02-22', 'A', 9 UNION ALL
  SELECT '2019-02-22', 'B', 10 
)
SELECT 
  a.date, a.location, a.revenue, 
  DATE_SUB(a.date, INTERVAL 1 YEAR) date_last_year, 
  IFNULL(b.revenue, 0) revenue_last_year 
FROM `project.dataset.table` a
LEFT JOIN `project.dataset.table` b
ON a.location = b.location
AND DATE_SUB(a.date, INTERVAL 1 YEAR) = b.date
-- ORDER BY a.date, a.location  

结果

Row date        location    revenue date_last_year  revenue_last_year    
1   2018-02-20  A           1       2017-02-20      0
2   2018-02-20  B           2       2017-02-20      0
3   2018-02-21  A           3       2017-02-21      0
4   2018-02-22  B           4       2017-02-22      0
5   2019-02-20  A           5       2018-02-20      1    
6   2019-02-20  B           6       2018-02-20      2    
7   2019-02-21  A           7       2018-02-21      3    
8   2019-02-21  B           8       2018-02-21      0
9   2019-02-22  A           9       2018-02-22      0
10  2019-02-22  B           10      2018-02-22      4    

【讨论】:

感谢米哈伊尔非常明确的答复。你是个传奇!

以上是关于Bigquery 表潜在客户列值基于日期的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:无效日期错误

需要关于基于非日期列和日期分区在 bigquery 中拆分表的建议

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

如何覆盖 bigquery 现有表中的列值

BigQuery - 在插入表时调用查询

如何让我的客户将 BigQuery 查询结果导出为 CSV