我幾天來一直無法解決這個問題,我希望你能幫上忙。SQL三表加入
我想寫一個查詢,返回有關股票的所有信息和上次更新。我想根據參數@date過濾結果,並只返回最近更新的股票比提供的@date參數少。我還需要時間戳爲空的股票,所以我知道這些股票需要更新。我有我的工作的follwing三個表:
stocks
- id
- asset_id
- market_id
- name
- symbol
- IPOYear
- sector
- industry
updates
- id
- [timestamp]
stock_updates
- stock_id
- update_id
我一直在使用以下查詢,這是工作很適合我,直到我意識到,如果股票沒有它這麼想的工作更新
select * from stocks s
where @date < (
select top 1 u.timestamp from
updates u,
stock_updates su
where
s.id = su.stock_id and
u.id = su.update_id
order by u.timestamp desc
)
因此,一些研究,我得出翻過外連接,我想這就是我要解決我的問題,我只是一直無法構建正確的查詢。我接近的最接近的是以下內容,但每次更新庫存時都會返回記錄。在此先感謝您的幫助!
這是我在哪裏現在:
select * from stocks s
left outer join stock_updates su on s.id = su.stock_id
left outer join updates u on u.id = su.update_id
where u.[timestamp] < @date
謝謝@jbrooks回覆!這幾乎可以工作,並且完全按照我在問題中提出的要求,它將使用最新的時間戳返回所有股票,包括時間戳爲空。不過,我忽略了添加的問題,我需要添加日期參數來選擇只有未通過日期更新的股票。當我取消註釋WHERE子句時,出現錯誤,因此我在「s.id = u.stock_id」之後移動它,並且它返回所有股票的最新時間戳記更新,但前提是它們有時間戳記。 – robson 2012-02-19 01:33:07
謝謝@Jbrooks。現在完美的作品非常感謝! – robson 2012-02-19 02:34:45