我在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月到2010年1月之间的所有支付记录,其中包含2009年8月帐户记录中的数据。谁能指点我这么简单呢?
谢谢你:)-C
答案 0 :(得分: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