[英]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.