sql - 如何生成日期系列以占用谷歌 BigQuery 中缺失的日期?

标签 sql google-bigquery

我试图从谷歌大查询表中获取每日销售额。我为此使用了以下代码。

select Day(InvoiceDate) date, Sum(InvoiceAmount) sales from test_gmail_com.sales 
where year(InvoiceDate) = Year(current_date()) and
Month(InvoiceDate) = Month(current_date())
group by date order by date

从上面的查询中,它只给出了表中每天的销售额总和。有可能有些日子没有任何销售。对于这种情况,我需要获取日期,并且总和应该是 0。例如,每个月应该有 30 0r 31 行销售总和。示例如下所示。每月的第 4 天没有销售。所以它的总和应该是0。
date | sales
-----+------
1    |   259
-----+------
2    |   359
-----+------
3    |   45
-----+------
4    |    0
-----+------
5    |  156

可以在大查询中做吗?基本上日期列应该是 1 - 28/29/30 或 31 日的系列,具体取决于一年中的月份

最佳答案

生成日期列表,然后加入您需要的任何表格似乎是最简单的。我用了 generate_date_array + unnest而且看起来很干净。

生成天数列表(每行一天):

  SELECT
  *
  FROM 
    UNNEST(GENERATE_DATE_ARRAY('2018-10-01', '2020-09-30', INTERVAL 1 DAY)) AS example

关于sql - 如何生成日期系列以占用谷歌 BigQuery 中缺失的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694040/

相关文章:

sql - 在 DB 中使用 MD5(URL) 代替 URL for WHERE

java - Java 字符串到日期

sql - PostgreSQL:从表中选择 * 时间戳在这个月内

mysql - 如何在一个 mysql 查询中获得所有这些结果?

sql - BigQuery 比较日期

google-bigquery - 谷歌云平台 API : gcloud API or Google API Client

php - 如何改进我的地理位置查询以免占用 8 分钟的 CPU 时间

google-bigquery - 在 BigQuery 中获取不超过一小时的数据

google-bigquery - 从 MySQL 转移到 BigQuery 而不超出限制?

wildcard - Google Big Query 在表名中间使用通配符