如何在 BigQuery 的开始日期和结束日期之间复制生成日期的行?
Posted
技术标签:
【中文标题】如何在 BigQuery 的开始日期和结束日期之间复制生成日期的行?【英文标题】:How to duplicate rows generating dates between Start Date and End Date in BigQuery? 【发布时间】:2019-10-16 04:19:00 【问题描述】:我有一个关于如何复制表中的行的问题,该表在 StartDate 和 EndDate 之间生成日期。实际上,我和Duplicating records to fill gap between dates in Google BigQuery 有同样的问题,但表格类型不同。
所以,我的桌子是这样的:
╔═══════════╦══════════════╦══════════════╗
║ user_name ║ start_date ║ end_date ║
╠═══════════╬══════════════╬══════════════╣
║ A ║ '2019-07-01' ║ '2019-07-31' ║
╚═══════════╩══════════════╩══════════════╝
我希望输出是这样的:
╔═══════════╦══════════════╦══════════════╦══════════════╗
║ user_name ║ start_date ║ end_date ║ date ║
╠═══════════╬══════════════╬══════════════╬══════════════╣
║ A ║ '2019-07-01' ║ '2019-07-31' ║ '2019-07-01' ║
╠═══════════╬══════════════╬══════════════╬══════════════╣
║ A ║ '2019-07-01' ║ '2019-07-31' ║ '2019-07-02' ║
╠═══════════╬══════════════╬══════════════╬══════════════╣
║ A ║ '2019-07-01' ║ '2019-07-31' ║ '2019-07-03' ║
╠═══════════╬══════════════╬══════════════╬══════════════╣
║ A ║ '2019-07-01' ║ '2019-07-31' ║ '2019-07-04' ║
╠═══════════╬══════════════╬══════════════╬══════════════╣
║ ... ║ ... ║ ... ║ ... ║
╠═══════════╬══════════════╬══════════════╬══════════════╣
║ A ║ '2019-07-01' ║ '2019-07-31' ║ '2019-07-31' ║
╚═══════════╩══════════════╩══════════════╩══════════════╝
我应该如何将它放在查询中?提前致谢。
【问题讨论】:
见How to generate date series to occupy absent dates in google BiqQuery?。 SQL不太擅长生成数据,你要找的是日历表。然后,只需将该日历表加入您的表即可。 【参考方案1】:以下是 BigQuery 标准 SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'A' user_name, DATE '2019-07-01' start_date, DATE '2019-07-31' end_date
)
SELECT user_name, start_date, end_date, day
FROM `project.dataset.table`,
UNNEST(GENERATE_DATE_ARRAY(start_date, end_date)) day
ORDER BY user_name, day
结果
Row user_name start_date end_date day
1 A 2019-07-01 2019-07-31 2019-07-01
2 A 2019-07-01 2019-07-31 2019-07-02
3 A 2019-07-01 2019-07-31 2019-07-03
. . .
29 A 2019-07-01 2019-07-31 2019-07-29
30 A 2019-07-01 2019-07-31 2019-07-30
31 A 2019-07-01 2019-07-31 2019-07-31
【讨论】:
以上是关于如何在 BigQuery 的开始日期和结束日期之间复制生成日期的行?的主要内容,如果未能解决你的问题,请参考以下文章
Python Google BigQuery 参数化 SELECT
使用 Google BigQuery 上的开始/结束日期优化活动帐户查询