2016-04-12 34 views
0

我有下面兩個表。SQL Server 2008中-Joining馬克斯上的多個表中的值

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都能看到一行。表a的最新更新日期表b的最新更新日期然後將這兩個表加入到Id中。這樣我就可以從兩個表中獲得最近的更新,每個ID有一行。

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 

我想要兩個表的最大值,並在接下來的步驟掙扎。 編輯 - 我需要兩個表的最新UpdateDate和id(1行每個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中提取最大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

Quassnoi - 不知道這是行不通的。如果我想從表A或B添加一列,我將不得不將這些列添加到內部選擇和分組中,對嗎?我試圖避免這樣做,並且我已經捕獲了上面的第一部分到我自己加入的地方。我希望我也可以用B表做這個。 –

+0

@mrjohn:爲什麼你需要添加其他列來選擇和分組? – Quassnoi

+0

後面的結果集中只有id和最大日期有additioanl列需要添加。我有大約40列。 –