Я не могу решить эту проблему уже несколько дней, и я надеюсь, что вы можете помочь.
Я пытаюсь написать запрос, который возвращает всю информацию об акциях и их последнем обновлении. Я бы хотел отфильтровать результаты по параметру @date и вернуть только те акции, которые он обновляет последними, меньше, чем предоставленный параметр @date. Мне также нужны акции с нулевой отметкой времени, поэтому я знаю, что эти акции должны быть обновлены. У меня есть три таблицы, с которыми я работаю:
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