取得資料表中最後一筆資料(用join的方式)

使用 join的方式,以主資料表中的資料為主要依據,取得狀態資料表中最新一筆紀錄,並顯示狀態資料表中的各項資訊

現在有兩個資料表(TableA,TableB),TableA存放物品基本資料,TableB存放物品更新狀態

表A

TableA
欄位名稱 資料型別 內容
ID int  
product varchar  
importDate datetime  

裡面的資料

ID prodcut importDate
1 物品A 2016/4/1
2 物品B 2016/4/1
3 物品C 2016/4/2
4 物品D 2016/4/3

資料表B

TableB
欄位名稱 資料型別 內容
product varchar  
updateTime datetime  
updateStatus varchar  

裡面的資料

product updateTime updateStatus
物品1 2016/4/2 更新1
物品2 2016/4/2 更新1
物品1 2016/4/3 更新2
物品3 2016/4/2 更新1
物品3 2016/4/3 更新2

現在要取得某個product的最新一筆紀錄,相信大家都會下SQL指令:

Select MAX(updateTime) ,product From TableB Where TableB=@product

但如果現在是要一次性取得TableA每個product的最新一筆紀錄,同時要將TableA跟TableB的欄位都顯示出來(重覆的product只出現一次),這時該怎麼下?

最後取出的表呈現如下:

ID product importDate updateTime updateStatus
1 物品A 2016/4/1 2016/4/3 更新2
2 物品B 2016/4/1 2016/4/2 更新1
3 物品C 2016/4/2 2016/4/3 更新2

我的方式:

1.先取得TableB每筆的最後一筆資料

Select MAX(updateTime) ,product From TableB Group by product

2.再以上面取得的資料與TableA做inner Join

Select A.ID,A.product,A.importDate From,temp.updateTime TableA as A
inner join (Select MAX(updateTime) as updateTime,product From TableB Group by product) as temp
on A.product=temp.product

3.此時己可取得每筆的更新紀錄,但TableB的欄位只有取到updateTime,並未將updateStatus取出來,所以這時要再將TableB與步驟2取得的表再做一次inner join,並以statusTime來做關聯依據

Select A.ID,A.product,A.importDate From,temp.updateTime,B.updateStatus TableA as A
inner join (Select MAX(updateTime) as updateTime ,product From TableB Group by product) as temp
on A.product=temp.product
inner join TableB as B on B.statusTime=temp.statusTime

大功告成。