[英]Additional condition for equal values using MAX() function
我有一個簡單的拍賣數據庫。 它包括一個包含出價的表。
+---------+---------+--------+------------+
| item_id | user_id | amount | time |
+---------+---------+--------+------------+
| 3 | 2 | 500 | 1540152972 |
| 3 | 4 | 500 | 1540151466 |
+---------+---------+--------+------------+
在拍賣結束時,我需要找到哪些用戶贏得了哪些項目(金額最高)。 我已經考慮過以下查詢
SELECT item_id, user_id, MAX(amount)
FROM auction_bids
GROUP BY item_id
在多個用戶出價相同的出價之前,該方法似乎工作正常。
在那種情況下,我需要檢索最早的(即:最低的time
值)。
如何將其用於GROUP BY
查詢?
如果沒有其他具有相同item_id的行具有更高的價格,則返回一行;或者,如果價格相同,則另一行稍后。
SELECT item_id, user_id, amount
FROM auction_bids a1
WHERE NOT EXISTS (select 1 from auction_bids a2
where a2.item_id = a1.item_id
and (a2.amount > a1.amount
or (a2.amount = a1.amount and a2.time < a1.time)))
不,這是過濾,不是聚合:
SELECT ab.*
FROM auction_bids ab
WHERE ab.amount = (SELECT MAX(ab2.amount)
FROM auction_bids ab2
WHERE ab2.item_id = ab.item_id
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.