- ベストアンサー
サブクエリについて教えてください。
すみませんが、教えてください。 下のようなテーブルhogeから、 各dateIDにつき、deliIDが最大の、priceを取得 しようとしています。 SELECT dateID, price FROM hoge ORDER BY deliID DESC を使って、同じdateIDをはじけば、実現できるのですが、 サブクエリを使うと、一発で実現できそうな気がするのですが、サブクエリを使ったことがないので、よくわかりません。 サブクエリで上記の抽出ができるのか? できるならば、そのSQLを教えてください。 テーブル:hoge dateID,deliID,price 1,1,1000 1,2,1500 1,3,1200 2,1,900 2,2,1100 2,3,2000 3,2,1800 3,3,1300 3,4,800 ...
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
WHERE句に、スカラー副問い合わせ ---------------------- SELECT hoge.dateID, hoge.deliID, hoge.price FROM hoge WHERE hoge.deliID = ( SELECT Max(foo.deliID) AS MaxdeliID FROM hoge as foo WHERE foo.dateID = hoge.dateID ); ----------------------- 又は、サブクエリとINNER JOIN ----------------------- SELECT hoge.dateID, hoge.deliID, hoge.price FROM hoge INNER JOIN ( SELECT hoge.dateID, Max(hoge.deliID) AS MaxdeliID FROM hoge GROUP BY hoge.dateID ) AS foo ON (hoge.dateID = foo.dateID) AND (hoge.deliID = foo.MaxdeliID); ----------------------- こんな感じで出来ると思います。 下のクエリの方が、パフォーマンスは良いかも(←かなり推測・・・(^^;)
その他の回答 (1)
- nicotinism
- ベストアンサー率70% (1019/1452)
師匠(と勝手に思い込んでます。ご容赦を)の後でなんですが こんなのでも? TOP 1 で拾ってます。 SELECT * FROM hoge WHERE (((hoge.deliID) In (SELECT TOP 1 deliID FROM hoge AS Tx WHERE Tx.dateID = hoge.dateID ORDER BY deliID desc)));
お礼
早速のご回答ありがとうございます。 これから、試してみます。