SQL循环从各种开始和结束日期生成许多行

时间:2017-12-03 03:06:52

标签: sql loops foreach google-sheets google-bigquery

我需要帮助编写一些SQL代码,我发现的所有答案似乎都假设静态数据并设置需要左连接的开始和结束日期。这是不同的。

设置

我在google工作表中有一张表基本上是

客户,广告系列,Start_Date,End_Date,Daily_Budget

客户1,活动1,2017-01-02,2017-01-12,10.00

客户2,活动1,2017-01-03,2017-02-15,34.09

此列表随着新客户,新广告系列等的增长而不断增长。

我需要做什么

我想把这个和输出到Bigquery使用SQL(我有连接和传输部分),以便最终结果是

客户1,广告系列1,2017-01-02,10.00

客户1,广告系列1,2017-01-03,10.00

客户1,广告系列1,2017-01-04,10.00

客户1,广告系列1,2017-01-05,10.00

依旧

客户2,活动1,2017-01-03,34.09

客户2,活动1,2017-01-04,34.09

客户2,活动1,2017-01-05,34.09

客户2,活动1,2017-01-06,34.09

依旧

基本上它为每一个新行循环,为每个日期创建所有必要的新行(这是我需要帮助的,如何从数据中生成行)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

以下是BigQuery Standard SQL

  
#standardSQL
SELECT Client, Campaign, Day, Daily_Budget
FROM `project.dataset.table`, 
UNNEST(GENERATE_DATE_ARRAY(Start_Date, End_Date)) Day  

您可以使用问题中的虚拟数据进行上述测试/播放

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'Client 1' Client, 'Campaign 1' Campaign, DATE '2017-01-02' Start_Date, DATE '2017-01-12' End_Date, 10.00 Daily_Budget UNION ALL
  SELECT 'Client 2', 'Campaign 1', DATE '2017-01-03', DATE '2017-02-15', 34.09 
)
SELECT Client, Campaign, Day, Daily_Budget
FROM `project.dataset.table`, 
UNNEST(GENERATE_DATE_ARRAY(Start_Date, End_Date)) Day