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:填写每个实体具有不同日期范围的缺失日期