次の列を持つ株式データを含む MS SQL テーブルがありますId, Symbol, Date, Open, High, Low, Close
。
テーブルに自分で参加したいので、 の日々の変化率を取得できますClose
。
すべてのレコードに前のセッションのデータも含まれるように、テーブル自体を結合するクエリを作成する必要があります (昨日の日付は使用できないことに注意してください)。
私の考えは、次のようなことをすることです:
select * from quotes t1
inner join quotes t2
on t1.symbol = t2.symbol and
t2.date = (select max(date) from quotes where symbol = t1.symbol and date < t1.date)
ただし、それが正しい/最速の方法であるかどうかはわかりません。パフォーマンスについて考えるとき、何を考慮に入れる必要がありますか? (たとえば、(Symbol, Date) ペアに UNIQUE インデックスを配置すると、パフォーマンスが向上しますか?)
このテーブルには、毎年約 100,000 の新しいレコードが追加されます。MS SQL Server 2008 を使用しています