2008-09-10 4 views
4

可能性の重複:
SQL Query to get latest price効率的なSQL方法MySQLデータベースから最新のエントリを選択するには?

私は株価の歴史を含むデータベースを持っています。私は、リストされているすべての株式の最新の価格を選択したいと思います。私はPostreSQLがDISTINCT ONステートメントを持っていることを知っています。

テーブルの列は、name,closingPriceおよびdateです。 namedateが一意のインデックスを形成します。

最も簡単(と非常にuneffective)の方法は、私が見つけた

SELECT * FROM stockPrices s 
WHERE s.date = 
(SELECT MAX(date) FROM stockPrices si WHERE si.name = s.name); 

はるかに良い方法は、これを行うための効率的な方法だろう何

SELECT * 
FROM stockPrices s JOIN (
    SELECT name, MAX(date) AS date 
    FROM stockPrices si 
    GROUP BY name 
) lastEntry ON s.name = lastEntry.name AND s.date = lastEntry.date; 

ですか?どのインデックスを作成すればよいですか?

重複:
SQL Query to get latest price

答えて

3

は、私はあなたの第二のアプローチは非常に効率的であることを考えるsimilar post

+0

私は検索に失敗します。 – skolima

0

を参照してください。その問題は何ですか?

名前と日付にインデックスを追加する必要があります。

+0

パフォーマンスが必要な場合は、インデックスを追加する必要があります。 10個の株と1年分のデータがあれば、MySQLはテーブルスキャニングでは比較的優れています。 –

+0

データが少ない場合、これを効率的に行う方法を求めていないでしょうか?最初の、明白なアプローチでさえ十分であろう。 –

関連する問題