SQL 插入一组优化值

SQL Insert Set of Values Optimized

目标是用 Teradata 中的样本数据创建一个 table 一年。一种方法是复制相似数据的前 6 个条目,然后将时间戳更改 365 次(对于我的用例)。 我不知道更好,写了一个程序

REPLACE PROCEDURE Whosebug()
BEGIN
    DECLARE i INTEGER DEFAULT 0;
    DELETE FROM TestTable;
    WHILE i < 365 DO
        INSERT INTO TestTable
            SELECT
                TestName
                ,Name_DT + i
            FROM
                (SELECT TOP 6
                    *
                FROM TestTable2
                WHERE Name_DT = '2021-12-15') AS sampledata;
        SET i = i + 1;
    END WHILE;
END;

这有效,但速度非常慢。 IT 部门也不希望我们使用程序。有没有更好的方法不用手术也能达到同样的效果?

获取重复数据的通用方法是交叉连接:

SELECT
    TestName
    ,calendar_date
FROM
    ( SELECT TOP 6 *        
      FROM TestTable2
      WHERE Name_DT = DATE '2015-12-15'
    ) AS sampledata
CROSS JOIN 
  ( SELECT calendar_date
    FROM sys_calendar.CALENDAR
    WHERE calendar_date BETWEEN DATE '2011-12-15' 
                            AND DATE '2011-12-15' + 364
  ) AS cal
;

在您的情况下,有 Teradata 的专有 EXPAND ON 语法来创建时间序列:

SELECT TestName, Begin(pd)
FROM 
        ( SELECT TOP 6 *        
          FROM TestTable2
          WHERE Name_DT = DATE '2015-12-15'
        ) AS sampledata
--  create one row per day in the range 
EXPAND ON PERIOD(Name_DT, Name_DT +365) AS pd