2010-06-28 82 views
1

日期範圍的更新行我有看起來像這樣的如何在Teradata的

accounts 
account_number integer 
date_updated_last datetime 
delinquency_code varchar(3) 

payments 
account_number integer 
statement_date datetime 
delinquency_code varchar(3) 

拖欠代碼列在帳戶填充的Teradata數據庫的兩個表,但在支付不填充。我想用基於date_updated_last和statement_date的拖欠代碼更新付款。問題是,statement_date是連續的,比如一個給定的賬戶在2009年7月開放,那麼在當時和現在之間每個月都會有一個記錄,但是隻有當信息改變時才添加賬戶記錄,所以可能存在例如,同一個帳戶的帳戶表中只有3條記錄。說,2009年8月,2010年1月和2010年3月。所以我想更新2009年8月到2010年1月之間的所有付款記錄與2009年8月帳戶記錄中的數據。任何人都可以點我一個簡單的方法來做到這一點?

謝謝:)

-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

什麼A是SET語句? – 2010-06-28 16:40:19

+0

對不起,改正了。我以A作爲表別名開始,然後在SET部分中更改它而不更改它。 – 2010-06-28 16:44:27

+0

這似乎確實起作用。 thx湯姆:) – 2010-06-28 17:59:12