• ベストアンサー

サブクエリについて教えてください。

すみませんが、教えてください。 下のようなテーブル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 ...

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

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); ----------------------- こんな感じで出来ると思います。 下のクエリの方が、パフォーマンスは良いかも(←かなり推測・・・(^^;)

xyz_1990
質問者

お礼

早速のご回答ありがとうございます。 これから、試してみます。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

師匠(と勝手に思い込んでます。ご容赦を)の後でなんですが こんなのでも? 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)));