Question

J'ai deux tables dans une base de données de Teradata qui ressemblent à cette

accounts
account_number integer
date_updated_last datetime
delinquency_code varchar(3)

payments
account_number integer
statement_date datetime
delinquency_code varchar(3)

la colonne de code de la délinquance est renseigné dans les comptes, mais n'est pas renseigné dans les paiements. Je voudrais mettre à jour les paiements avec le code de la délinquance basé sur date_updated_last et statement_date. le problème est que statement_date est séquentiel, par exemple un compte donné a été ouvert en juillet 2009, il y aurait un enregistrement pour chaque mois entre alors et maintenant, mais un enregistrement de compte est ajouté lorsque les changements d'information, donc il peut y avoir, pour par exemple, seulement trois enregistrements de la table de compte pour le même compte. Say, août 2009, janvier 2010 et mars 2010. Je ne voudrais donc mettre à jour tous les enregistrements de paiement entre août 2009 et janvier 2010, les données de l'août 2009 Enregistrement dans les comptes. Pointpeut quiconque me un moyen facile de le faire?

merci:)

-C

Était-ce utile?

La solution

Ok, voici un autre essai à la syntaxe 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top