1

我在 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 的拖欠代码更新付款。问题是 statement_date 是连续的,假设一个给定的帐户是在 2009 年 7 月开设的,从那时到现在,每个月都会有一个记录,但是只有在信息发生变化时才会添加一个帐户记录,所以可能会有,对于例如,同一帐户的帐户表中只有 3 条记录。比如说,2009 年 8 月、2010 年 1 月和 2010 年 3 月。所以我想用 2009 年 8 月帐户记录中的数据更新 2009 年 8 月到 2010 年 1 月之间的所有付款记录。谁能指出一个简单的方法来做到这一点?

谢谢你 :)

-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 回答