私はこの問題を数日間は解決できませんでした。SQL 3テーブルへの参加
私は、株式に関する最新情報と更新された最新情報を返すクエリを作成しようとしています。 @dateパラメータに基づいて結果をフィルタリングし、最新の更新情報が指定された@dateパラメータ未満の株式のみを返したいと思います。私はまた、タイムスタンプがゼロの株式を必要とするので、論文の株式を更新する必要があることを知っています。私は次のクエリを使用してきたと私は在庫が持っていない場合、それは仕事をdosen't実現するまで、それは私のためによく働いていた
stocks
- id
- asset_id
- market_id
- name
- symbol
- IPOYear
- sector
- industry
updates
- id
- [timestamp]
stock_updates
- stock_id
- update_id
:私は私が働いているfollwing 3つのテーブルを持っています更新
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
)
だからいくつかの研究の後、私はaccross外部結合と私はそれは私がちょうど正しいクエリを作成することができていない私の問題を修正するために必要なものだと思いました。私が一番近かったのは以下のことですが、在庫が更新されるたびにレコードが返されます。あなたの助けを前もってありがとう!
私は今でてる場所です:私はあなたの質問の状態として、@date
パラメータによって任意のフィルタリングを含めていない
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さん、ありがとうございました!これはほとんど動作し、私が質問で尋ねたことを正確に行います。タイムスタンプがnullの場合を含め、すべての株式を最新のタイムスタンプで返します。しかし私は、渡された日付から更新されていない株式だけを選択するために日付パラメータを追加する必要があるという質問を追加することを怠った。 WHERE句のコメントを外したときにエラーが発生したので、 "s.id = u.stock_id"の後に移動し、最新のタイムスタンプの更新ですべての株を返しましたが、タイムスタンプがある場合にのみ返しました。 – robson
ありがとう@Jブルック。これは完璧に今、とても感謝しています! – robson