Domanda

Ho due tabelle di un database Teradata che assomigliano a questo

accounts
account_number integer
date_updated_last datetime
delinquency_code varchar(3)

payments
account_number integer
statement_date datetime
delinquency_code varchar(3)

la colonna codice di delinquenza è popolata in conti, ma non è popolata nei pagamenti. Vorrei aggiornare i pagamenti con il codice di delinquenza in base a date_updated_last e statement_date. il problema è che statement_date è sequenziale, per esempio un determinato account è stato aperto nel luglio del 2009, non ci sarebbe un record per ogni mese tra allora e adesso, ma un record di account viene aggiunto solo quando le informazioni cambiano, quindi non ci possono essere, per esempio, solo 3 record della tabella conto per lo stesso account. Say, agosto 2009, gennaio 2010 e marzo 2010. quindi vorrei aggiornare tutti i record del pagamento tra agosto 2009 e gennaio 2010, con i dati del record di agosto 2009 in conti. qualcuno mi può punto ad un modo semplice per fare questo?

grazie:)

-C

È stato utile?

Soluzione

Ok, ecco un altro tentativo per la sintassi 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top