【问题标题】:Access a temp table in a while loop在 while 循环中访问临时表
【发布时间】:2021-10-24 06:11:22
【问题描述】:

我正在创建一个临时表,然后尝试像这样循环该表:

CREATE TEMP TABLE `table_name` AS 
    SELECT 1 AS row, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 1 WEEK) AS start, DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)) AS end_date_plus_one UNION ALL
    SELECT 2, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 2 WEEK), DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 1 WEEK) UNION ALL
    SELECT 3, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 3 WEEK), DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 2 WEEK) UNION ALL
    SELECT 4, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 4 WEEK), DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 3 WEEK)
    ;

BEGIN
    DECLARE loopRow INT64;
    SET loopRow = 1;

    WHILE table_name.start IS NOT NULL DO
        SELECT start FROM `table_name` WHERE row = loopRow;
        SET loopRow = loopRow + 1;
    END WHILE;
END 

预期的输出是开始日期列表,当没有更多日期时会中断循环。我收到错误Unrecognized name: table_name

【问题讨论】:

    标签: sql while-loop google-bigquery


    【解决方案1】:

    试试看是否有帮助。

    
    create temp table table_name AS     SELECT 1 AS row, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 1 WEEK) AS start, DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)) AS end_date_plus_one UNION ALL
        SELECT 2, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 2 WEEK), DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 1 WEEK) UNION ALL
        SELECT 3, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 3 WEEK), DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 2 WEEK) UNION ALL
        SELECT 4, DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 4 WEEK), DATE_SUB(DATE_TRUNC(CURRENT_DATE('Europe/London'), WEEK(MONDAY)), INTERVAL 3 WEEK)
        ;
    BEGIN
        DECLARE loopRow INT64;
        SET loopRow = (SELECT COUNT(START) FROM table_name);
        WHILE loopRow >= 1  DO
            SELECT start FROM table_name WHERE row = loopRow;
            SET loopRow = loopRow - 1;
        END WHILE;
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2020-03-08
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多