3

items という名前のテーブルがあるとします。

sender_id receiver_id goods_id price
  2            1          a1   1000
  3            1          b2   2000
  2            1          c1   5000
  4            1          d1   700
  2            1          b1   500   

ここでは、アイテムテーブルから価格の降順でsender_id、goods_idを選択して、同じsender_id値(ここではsender_id 2)を含む行が複数回表示されないようにします。次のクエリを使用しましたが、無駄でした:

select distinct sender_id,goods_id from items where receiver_id=1 order by price desc

結果は、sender_id 2 を含むタプルを含む 5 つのすべてのタプル (レコード) を時間の降順で 3 回表示します。そうです?私の予想される出力は次のとおりです。

sender_id goods_id
   2         c1
   3         b2
   4         d1
4

4 に答える 4

2

各グループの最高価格を取得するには、次のようにします。

SELECT T1.*
FROM (
    SELECT
     MAX(price) AS max_price,
     sender_id
    FROM items
    GROUP BY sender_id
) AS T2
INNER JOIN items T1 ON T1.sender_id = T2.sender_id AND T1.price = T2.max_price
WHERE T1.receiver_id=1 
ORDER BY T1.price
于 2014-01-09T04:46:22.263 に答える