كيفية تحديث الصفوف من خلال مجموعة من التواريخ في تيراداا
سؤال
لدي جدولين في قاعدة بيانات 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 و statef_date. المشكلة هي أن state_date متسلسلة ، على سبيل المثال فتح حساب معين في يوليو 2009 ، سيكون هناك سجل واحد لكل شهر بين ذلك الحين والآن ، ولكن يتم إضافة سجل حساب فقط عند تغيير المعلومات ، لذلك قد يكون هناك ، مثال ، فقط 3 سجلات في جدول الحساب لنفس الحساب. على سبيل المثال ، أغسطس 2009 ويناير 2010 ومارس 2010. لذلك أرغب في تحديث جميع سجلات الدفع بين أغسطس 2009 ويناير 2010 مع البيانات من سجل أغسطس 2009 في الحسابات. هل يمكن لأي شخص أن يوجهني إلى طريقة سهلة للقيام بذلك؟
شكرا لك :)
-C
المحلول
حسنًا ، هذه تجربة أخرى في بناء جملة 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