0

items と呼ばれるテーブルと、bids と呼ばれるテーブルの 2 つのテーブルがあります。入札には、item_id を持つ一連の入札が含まれています。関連付けられた最高入札価格でアイテムに関するすべての情報を取得しようとしています。

私は何かをやってみました

SELECT * FROM items JOIN bids ON items.id=bids.item_id GROUP BY item_id

ただし、それは最高額ではなく最初の入札額を返すようです。

どうすれば最高値を取得できますか?

4

2 に答える 2

1

サブクエリを使用して最大入札額を見つけ、それを既存のクエリと結合して、必要な出力データをすべて取得する必要があります。入札値が という列にあり、テーブルvalueの PK がという列であると仮定します。bidsid

SELECT items.*, bids.*
FROM
  items
  JOIN (
    SELECT id, item_id, MAX(value) AS value FROM bids GROUP BY item_id
  ) AS maxbids ON items.id = maxbids.item_id
  JOIN bids    ON  bids.id = maxbids.id
GROUP BY items.id

最大金額の入札が複数ある場合、このクエリはそれらすべてを返します。

于 2012-05-01T18:26:11.557 に答える
0

自己参加もそうだと思います。したがって、(@ egyalが行ったように)bids.value列があると仮定します。

SELECT *
FROM items i
  JOIN bids b1 ON b1.item_id=i.id
  JOIN bids b2 ON b2.item_id=i.id AND b2.value>b1.value
WHERE b2.id IS NULL

ただし、同じ金額で複数の入札がある場合は、複数の行が返されます。それらをどのように処理しますか?

(そして、それSELECT *を絞り込む必要があります。)

于 2013-02-11T07:22:10.390 に答える