2013-10-10 71 views
1

我有一個表,我已經產生信息彙總到每天 我有第二個表可以被認爲是一個日曆表,它允許我在加入表時得到週數的聚合物TERADATA:加入表

表中的日期都是整數,例如20130501(年月日)

當我創建下面的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的語法錯誤:與「)」和預期的東西「 - 」

謝謝大家的時間 它一直現在困擾我幾天

回答

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