2010-06-28 7 views
1

У меня есть две таблицы в базе данных Teradata, которые выглядят как этоткак обновлять строки по диапазону дат в 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 года. Между тем тогда и сейчас будет одна запись за каждый месяц, но запись учетной записи добавляется только тогда, когда информация изменяется, поэтому может быть, для например, только 3 записи в таблице учетных записей для одной учетной записи. Скажем, август 2009 года, январь 2010 года и марш 2010. Таким образом, я хотел бы обновить все платежные записи между августом 2009 года и январем 2010 года данными из августовской записи 2009 года в аккаунтах. может ли кто-нибудь указать мне на простой способ сделать это?

спасибо :)

-C

ответ

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 
+0

что А в множестве заявление? –

+0

Извините, исправил это. Я начал с просто A в качестве псевдонима таблицы, а затем изменил его, не меняя его в части SET. –

+0

это работает. thx tom :) –