簡體   English   中英

在 while 循環中訪問臨時表

[英]Access a temp table in a while loop

我正在創建一個臨時表,然后嘗試像這樣循環該表:

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 

預期的 output 是一個開始日期列表,當沒有更多日期時會打破循環。 我收到錯誤Unrecognized name: table_name

試試這是否有幫助。


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM