TERADATA:加入表格

时间:2013-10-10 09:05:28

标签: sql calendar inner-join teradata

我有一个表格,我已经生成了每天将信息汇总到聚合的表格 我有一个第二个表可以被认为是一个日历表,它允许我在加入表时获取聚合的周数

表中的日期都是整数,例如20130501(YYYYMMDD)

当我在下面创建SQL(通用)时,它工作正常,但现在我想安排这个脚本每周运行一次以获得前一周并收到错误

脚本正常运行

    SELECT *
    FROM TABLE_1 as sample
    INNER JOIN TABLE_2 as calendar
    ON sample.day = calendar.day
    WHERE sample.day >= 20130501
    AND sample.day <= 20130507

脚本失败

    SELECT *
    FROM TABLE_1 as sample
    INNER JOIN TABLE_2 as calendar
    ON sample.day = calendar.day
    -- >= Previous Monday Last week
    WHERE sample.day >= CAST(CAST(((DATE-DAYOFWEEK(DATE)-5) (FORMAT 'YYYYMMDD')) AS CHAR(8)) AS INT)
   --  <= Previous Sunday Last week
    AND   sample.day <= CAST(CAST(((DATE-DAYOFWEEK(DATE)+ 1) (FORMAT 'YYYYMMDD')) AS CHAR(8)) AS INT) 

我在第二个脚本上的错误消息是

Teradata ODBC Teradata驱动程序语法错误:期待&#39;)&#39;和&#39; - &#39;

谢谢大家的时间 几天来它一直困扰着我

1 个答案:

答案 0 :(得分:3)

DAYOFWEEK不是内置的Teradata功能。 有一个DAYOFWEEK ODBC函数,但你必须在ODBC驱动程序中打开一个标志才能使用它。

根据您的版本,可能有一个类似TD_DAY_OF_WEEK的UDF,或者您编写自己的SQL-UDF。否则试试这个:

BETWEEN CAST(CURRENT_DATE - ((CURRENT_DATE - DATE '0001-01-07') MOD 7) - 6 AS INT) + 19000000
    AND CAST(CURRENT_DATE - ((CURRENT_DATE - DATE '0001-01-07') MOD 7)     AS INT) + 19000000