كيفية تحديث الصفوف من خلال مجموعة من التواريخ في تيراداا

StackOverflow https://stackoverflow.com/questions/3133897

  •  01-10-2019
  •  | 
  •  

سؤال

لدي جدولين في قاعدة بيانات 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top