1

情報が 1 日あたりの集計にロールアップされる、生成したテーブルがあります テーブルを結合するときに集計の週番号を取得できるカレンダー テーブルと見なすことができる 2 つ目のテーブルがあります

表の日付はすべて整数です (例: 20130501 (YYYYMMDD))。

以下の(一般化された)SQLを作成すると正常に動作しますが、このスクリプトを週に1回実行して前の週を取得するようにスケジュールしたいのですが、エラーが発生しています

スクリプトは正常に動作します

    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) 

2 番目のスクリプトで表示されるエラー メッセージは次のとおりです。

Teradata ODBC Teradata Driver 構文エラー: ')' と '-' の間に何かが必要です

時間を割いていただきありがとうございます 数日間私を悩ませてきました

4

1 に答える 1

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
于 2013-10-10T11:16:24.363 に答える