我几天来一直无法解决这个问题,我希望你能帮上忙。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