【问题标题】:Duplicating records for a date range复制日期范围的记录
【发布时间】:2013-03-23 22:01:02
【问题描述】:

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

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

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

** 抱歉,格式无法正确显示。

到目前为止,我认为最好的方法是使用多个 union 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)所以我愿意接受任何关于如何改进它的想法。

【问题讨论】:

  • 既然date是保留字,我猜这只是一个例子,对吧?

标签: sql performance teradata ansi-sql


【解决方案1】:

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

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

节食

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多