• 締切済み

製品の最安店舗を取りたい。

添付画像のようなテーブルがあります。 製品IDと販売店でユニークです。 製品毎に、最安の価格で売っている店を一覧として 出したいのですが、うまくいかず困っています。 表示としては TEST1 100 A店 TEST2 300 C店 というようにしたいのです。 また、もし最安の店舗が複数あれば、登録日が一番新しい店を 最安店舗としたいです。 製品IDでGroupByをして、価格のminで、製品毎の最安はとれるんですが、 最安の店舗が複数ある場合に困っています。 サブクエリで登録日でソートしてTOP1とかになるのでしょうか。 冗長で重いクエリになってしまい、実用に耐えず、困っています。 うまい取り方があったらご教授いただけないでしょうか。 よろしくお願いします。

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

添付画像がありません。 サンプルデータをテキストでいいので補足してください。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

select abc.* from abc join ( select 製品id, 販売店 from ( select 製品id, 販売店, ROW_NUMBER() OVER( PARTITION BY 製品id ORDER BY 価格 ,登録日 DESC ) AS RN from abc ) as t where rn = 1 ) as t on abc.製品id=t.製品id and abc.販売店=t.販売店

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

SELECT * FROM テーブル a WHERE 価格 = (SELECT MIN(価格) FROM テーブル WHERE 製品ID = a.製品ID) AND 登録日 = (SELECT MAX(登録日) FROM テーブル WHERE 製品ID = a.製品ID AND 価格 = a.価格) ORDER BY 製品ID

関連するQ&A