复制日期范围的记录

时间:2013-04-02 14:38:39

标签: sql performance teradata ansi-sql

我必须从周级数据中复制记录并将其推回,以便它在前一周填充数据。所以我得到一个1/6的行,这是一个星期六,然后填写所有列以获得相同的数据,除了日期,直到1/1(星期日)。

所以我的来源是 日期,信息 1/6,一个

目标应该是 1/7,b | 1/6,a | 1/5,a | 1/4,a | 1/3,a | 1/2,a | 1/1,一个

**对不起格式,无法正确显示。

到目前为止,我想到的最好的方法是使用几个联盟alls

SELECT date, info FROM test
 UNION ALL
SELECT date - 1, info FROM test
 UNION ALL
SELECT date - 2, info FROM test

等。

或进行受控制的笛卡尔联接

SELECT tmp_date AS date, info FROM test AS test
INNER JOIN date_temp_table AS dt
  ON dt.tmp_date <= test.date
    AND dt.tmp_date > test.date - 7

现在上述两种方法都有效,但它们都非常低效且几乎杀死了我的数据库(Teradata)所以我对如何改进它的任何想法持开放态度。

1 个答案:

答案 0 :(得分:0)

很难理解你真正想要的是什么,但在TD13.10中,根据使用EXPAND ON的句点复制行很容易:

SELECT 
   BEGIN(pd) AS dt,
   info
FROM test 
EXPAND ON PERIOD(datecol-7, datecol) AS pd

迪特