【问题标题】:Big Query Loop through Start and End dateBig Query 循环遍历开始和结束日期
【发布时间】:2021-01-14 13:25:17
【问题描述】:

我有一个表格,其中包含间隔为 6 个月的开始日期和结束日期。下面是一个例子:

Row   start_date  end_date
1     2018-09-18   2019-03-18
2     2019-03-18   2019-09-18
3     2019-09-18  2020-03-18

我有一个主表(非常大),所以我循环通过这个 start_date 和 end_date 并将选择的记录插入到不同的表中。以下是示例查询。

     create table dataset.t1 (v1,v2,v3,create_dt);
    
    LOOP
    
        insert into dataset.t1 (v1,v2,v3,create_dt) select v1,v2,v3,create_dt 
    from dataset.t2 where create_dt >= (select start_date from dataset.t1) 
    and create_date < (select end_date from dataset.t1)

END LOOP.

当我尝试使用 Loop 时,出现以下错误:

Query error: Scalar subquery produced more than one element at.

谁能帮我解决这个问题。我的最终目标是通过将日期划分为不同的范围来提高性能。

【问题讨论】:

  • 您能否根据您提供的输入数据使用您正在寻找的所需输出来更新您的问题?

标签: sql performance loops google-bigquery date-range


【解决方案1】:

关于您遇到的错误,问题是您的(select start_date from dataset.t1) 返回多个元素,不确定您想要实现什么但为了使子查询工作,它应该类似于(select MIN(start_date) from dataset.t1)

我不明白你的循环,因为你的循环中似乎没有任何改变(除了你向 t1 插入一些东西),你应该考虑你的循环应该何时退出。

【讨论】:

  • 感谢您的回复。好的,如果我从 dataset.t1 给出 min(start_date) 那么我将循环一个开始日期和结束日期。我对使用循环 start_dates , end_dates 以及如何退出循环感到困惑。任何输入都会有所帮助
  • @Kosalya 请在此处查看使用 start_date 的示例:github.com/anand-eyunni/BigQuery
  • 谢谢大家,我确实通过在有日期的表中添加计数器并在计数器达到最大值时退出循环来解决。
【解决方案2】:

以下适用于 SQl 服务器。您将必须找到与游标等效的大数据。您可以使用数组来查找开始和结束日期并循环遍历。 您可以创建一个临时表来存储开始日期和结束日期并将其命名为#temp_db。打开游标并将第一个开始日期和结束日期提取到变量中。来自#temp_db

select start_date,end_date into @start_date,@end_date from #temp_db

执行 Sql: 插入#new_tbl

select * from #src_tbl where create_dt &gt;= @start_date and create_dt &lt; @end_date.

对于从#temp_db 获取的每条记录,根据您的请求开始插入到新表/同一个表中。 当没有更多行可以从 your#temp_db..获取时,您会将所有记录插入到#new_tbl

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2020-11-20
    相关资源
    最近更新 更多