как обновить строки по диапазону дат в терадате - PullRequest
1 голос
/ 28 июня 2010

У меня есть две таблицы в базе данных teradata, которые выглядят следующим образом

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. проблема в том, что date_date является последовательным, скажем, определенная учетная запись была открыта в июле 2009 г., будет одна запись на каждый месяц с того времени до настоящего времени, но запись учетной записи добавляется только при изменении информации Например, только 3 записи в таблице счетов для одной учетной записи. Скажем, август 2009 г., январь 2010 г. и март 2010 г., поэтому я хотел бы обновить все записи о платежах в период с августа 2009 г. по январь 2010 г., добавив в них данные из записи за август 2009 г. Кто-нибудь может указать мне простой способ сделать это?

спасибо:)

-C

1 Ответ

3 голосов
/ 28 июня 2010

Хорошо, вот еще одна попытка синтаксиса 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
...