SQL BigQuery - 插入具有不同日期范围的行

Posted

技术标签:

【中文标题】SQL BigQuery - 插入具有不同日期范围的行【英文标题】:SQL BigQuery - Insert rows with different date-range 【发布时间】:2020-01-14 02:45:53 【问题描述】:

在我的 SQL - BigQuery 中,我有一个包含 3 列的表:关于销售记录的日期、ID、数量、价格。

ID   | Date        | Quantity|Price
A123 | 10/30/2010  | 3       |600,000
B567 | 10/30/2010  | 6       |900,000

我想添加行重复ID,数量但日期继续,价格根据数量(月数)划分为每个月,像这样

ID   | Date        | Quantity|Price
A123 | 10/30/2010  | 3       |200,000
A123 | 11/30/2010  | 3       |200,000
A123 | 12/30/2010  | 3       |200,000
B567 | 10/30/2010  | 6       |150,000
B567 | 11/30/2010  | 6       |150,000
B567 | 12/30/2010  | 6       |150,000
B567 | 01/30/2011  | 6       |150,000
B567 | 02/28/2011  | 6       |150,000
B567 | 03/30/2011  | 6       |150,000

我搜索了一些关于 while 的查询,但我不知道如何在每个循环中打印结果。你能帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT id, DATE_ADD(date, INTERVAL delta MONTH) date, quantity, price / quantity price
FROM `project.dataset.table`,
UNNEST(GENERATE_ARRAY(0, quantity - 1)) delta
ORDER BY id, date

您可以使用您问题中的示例数据进行测试,如以下示例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'A123' id, DATE '2010-10-30' date, 3 quantity, 600000 price UNION ALL
  SELECT 'B567', '2010-10-30', 6, 900000 
)
SELECT id, DATE_ADD(date, INTERVAL delta MONTH) date, quantity, price / quantity price
FROM `project.dataset.table`,
UNNEST(GENERATE_ARRAY(0, quantity - 1)) delta
ORDER BY id, date  

结果

Row id      date        quantity    price    
1   A123    2010-10-30  3           200000.0     
2   A123    2010-11-30  3           200000.0     
3   A123    2010-12-30  3           200000.0     
4   B567    2010-10-30  6           150000.0     
5   B567    2010-11-30  6           150000.0     
6   B567    2010-12-30  6           150000.0     
7   B567    2011-01-30  6           150000.0     
8   B567    2011-02-28  6           150000.0     
9   B567    2011-03-30  6           150000.0     

【讨论】:

以上是关于SQL BigQuery - 插入具有不同日期范围的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 的标准 SQL 中解析具有不同日期字符串的列中的值

按时间范围谷歌选择不同的用户组 - bigquery SQL

如何在标准 SQL 的 BigQuery 中过滤具有 iso 周值的列?

SQL Server:填写每个实体具有不同日期范围的缺失日期

BigQuery:将表插入到具有分片表的现有 Google 分析中

在 BigQuery 中对具有 DateTime 值的字符串字段进行范围查询