2010-02-25 65 views
4

我正在查詢以獲取A記錄日期之前的每個A記錄的最新B記錄。 (我希望這是有道理的)如何加入最新的記錄? SQL

而我不知道該怎麼做!請幫忙!

我最後的觀點將是

AID, AData, ADate, BData 

粗糙表模式

table A 
(
AID, 
ADate, 
AData 
) 

table B 
(
BID, 
AID, 
BDate, 
BData 
) 

事情需要注意的是:

  1. 表A是在SQL數據庫
  2. 表B是從 將服務器鏈接到Oracle
  3. 表B超 巨大

謝謝!

+0

非常感謝! – 2010-02-25 18:51:33

回答

2

該查詢會做的伎倆:

select  a.*, curr.* 
from  a 
inner join b   curr 
on   a.aid = curr.aid 
and  a.adate > curr.bdate 
where  curr.bdate = (
       select max(b.bdate) 
       from b 
       where b.aid = curr.aid 
       and b.bdate <= curr.bdate 
      ) 

有幾個的擊打。我對這些「鏈接表」沒有太多經驗,但我可以想象它會出現可怕的錯誤。你應該嘗試弄清楚MS SQL如何解決這種查詢。你想要確定的是,它可以將子查詢推送到oracle側 - 你絕對不希望MS SQL通過網絡獲取所有數據並在MS SQL端執行它。

如果性能是一個問題,你應該嘗試做相反的事情 - 在oracle端獲得A表的副本,在那裏完全解決查詢中的查詢,然後如果你需要在MSSQL端,鏈接到該視圖。

+0

聽起來像答案! – 2010-02-25 00:43:14