2016-04-12 9 views
0

私は以下の2つのテーブルを持っています。SQL Server 2008 - 複数のテーブルの最大値に対する結合

a.id a.UpdateDate a.O a.1  b.id b.UpdateDate b.0 b.1 
    1  1/1/15  a  b   1   2/1/15 a  b 
    1  1/1/15  c  d   1   3/1/15 a  c 
    1  5/1/15  e  f   1   3/1/15 d  e 

Idごとに1行表示したいと思います。テーブルaの最新の更新日テーブルbの最新の更新日は、Idの2つのテーブルを結合します。そうすれば、IDごとに1つの行を持つ両方のテーブルから最新のアップデートを取得できます。

a.id a.UpdateDate b.id b.UpdateDate a.o a.1 b.0 b.1 
    1  5/1/15  1   3/1/15  e  f  d  e 

両方のテーブルの最大値が必要で、次のステップで苦労します。 EDIT - 両方のテーブルの最新のUpdateDateとid(1行Per id)が必要です。次に、テーブルaとbをidに結合します。

Select a.id, a.UpdateDate, b.id, b.UpdateDate 
From a 
    inner join (select id, max(UpdateDate) AS dt From a group by id) 
    maxdt On A.id = maxdt.id and a.UpdateDate = maxdt.UpdateDate 

上記では、テーブルaから最大UpdateDateを抽出しています。では、テーブルbからmax UpdateDateをどのように抽出するのですか?これが明確であることを祈っています...

答えて

1
SELECT * 
FROM (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY id ORDER BY updateDate DESC) rn 
     FROM a 
     GROUP BY 
       id 
     ) ag 
JOIN (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY id ORDER BY updateDate DESC) rn 
     FROM b 
     GROUP BY 
       id 
     ) bg 
ON  bg.id = ag.id 
WHERE ag.rn = 1 
     AND bg.rn = 1 
+0

クワースノイ - これはうまくいくとは思いません。テーブルAまたはBの列を追加する場合は、これらの列を内側の選択とグループに追加する必要があります。私はこれを避けようとしているし、上記の最初の部分を私が自己結合した場所に取り込んだ。私はテーブルBでもこれをやりたいと思っていました。 –

+0

@mrjohn:なぜ、他の列を選択してグループ化する必要がありますか?結果セットには、IDと最大日付のみが表示されます。 – Quassnoi

+0

追加する必要がある列があります。私は約40列あります。 –

関連する問題