1

テラデータデータベースに次のような2つのテーブルがあります

accounts
account_number integer
date_updated_last datetime
delinquency_code varchar(3)

payments
account_number integer
statement_date datetime
delinquency_code varchar(3)

延滞コード列はアカウントに入力されますが、支払いには入力されません。date_updated_lastとstatement_dateに基づく延滞コードで支払いを更新したいと思います。問題は、statement_dateがシーケンシャルであるということです。たとえば、特定のアカウントが2009年7月に開設された場合、それから現在まで毎月1つのレコードがありますが、アカウントレコードは情報が変更されたときにのみ追加されるため、たとえば、同じアカウントのアカウントテーブルには3つのレコードしかありません。たとえば、2009年8月、2010年1月、2010年3月です。したがって、2009年8月から2010年1月までのすべての支払いレコードを、アカウントの2009年8月のレコードのデータで更新したいと思います。誰かが私にこれを行う簡単な方法を教えてもらえますか?

ありがとうございました :)

-C

4

1 に答える 1

3

さて、Teradata構文の別の試みがあります:

UPDATE
    Payments
FROM
    (
        SELECT
            A1.account_number,
            A1.date_updated_last AS begin_date,
            A2.date_updated_last AS end_date,
            A1.delinquency_code
        FROM
            Accounts A1
        INNER JOIN Accounts A2 ON
            A2.account_number = A1.account_number AND
            A2.date_updated_last > A1.date_updated_last
        WHERE
            NOT EXISTS
            (
                SELECT *
                FROM
                    Accounts A3
                WHERE
                    A3.account_number = A1.account_number AND
                    A3.date_updated_last > A1.date_updated_last AND
                    A3.date_updated_last < A2.date_updated_last
            )
    ) AS SQ (account_number, begin_date, end_date, delinquency_code)
SET
    delinquency_code = SQ.delinquency_code
WHERE
    account_number = SQ.account_number AND
    statement_date >= SQ.begin_date AND
    statement_date < SQ.end_date
于 2010-06-28T16:28:04.860 に答える