2016-03-25 14 views
0

現在複数のテーブルを扱っています。データベースで検索するtable1。例えば、私はExcelシートとDB内の更新されたレコードに取り組んできましたが、レコードが正しく更新されたかどうか、そしていつレコードが更新されたかをDBで調べる必要があります。 私は自分のデータが含まれているテーブル1を持っていて、DBで検索しています。 基本的には、DBからすべてのレコードを結合してランキングを適用してから、自分のtable1で検索しました。 レコードが何度も変更されている可能性があります。最新の日付が必要なのでランキングを適用しました。これを修正するのを手伝ってください。望ましい結果テラデータのランク付け方法

select a.*, b.update_dt||' '||c.udpate_dt|| as update_date 
from table1 a 
left join 
(select distinct customer_id, max(last_updated_dt) as update_dt 
    qualify rank() over(partition by customer_id order by Last_updated_dt) as rank 
    from table2 
    group by customer_id 
) b 
on a.customer_id=b.customer_id 

left join 
(select distinct customer_id, max(last_updated_dt) as update_dt 
    qualify rank() over(partition by customer_id order by last_updated_dt) as rank 
    from table3 
    group by customer_id 
)c 
on a.customer_id=c.customer_id 
+0

ビットを緊急の場合、誰かがこれで助けることができれば私のために素晴らしいだろう。 thanks –

答えて

3

を取得することはできませんよとあなたはmax(last_updated_dt)またはQUALIFY、どちらか一方だけを必要とする:

select a.*, b.update_dt||' '||c.udpate_dt|| as update_date 
from table1 a 
left join 
(select customer_id, max(last_updated_dt) as update_dt 
    from table2 
    group by customer_id 
) b 
on a.customer_id=b.customer_id 

left join 
(select customer_id, max(last_updated_dt) as update_dt 
    from table3 
    group by customer_id 
)c 
on a.customer_id=c.customer_id 

あなたは最高の日以外の他の列が必要な場合:

select a.*, b.update_dt||' '||c.udpate_dt|| as update_date 
from table1 a 
left join 
(select customer_id, last_updated_dt as update_dt, ... 
    from table2 
    qualify row_number() over(partition by customer_id 
         order by last_updated_dt DESC) = 1 
) b 
on a.customer_id=b.customer_id 

left join 
(select customer_id, last_updated_dt as update_dt, ... 
    from table3 
    qualify row_number() over(partition by customer_id 
         order by last_updated_dt DESC) = 1 
)c 
on a.customer_id=c.customer_id 
+0

ありがとう、1つの質問 - トランザクションのように3回更新され、私は最新の日付が必要です。 Row_numberは何をしますか?またはランク? –

+0

@puneetmadan: 'ROW_NUMBER'は一意の値を割り当てることが保証されています(同じ日付の更新が複数ある場合はランダムに選択されます)が、' RANK'は同じ日付に同じ値を割り当てます。最後の日付( 'MAX'バージョンに似ています)。 – dnoeth

関連する問題