我有一个简单的拍卖数据库。它包括一个包含标书的表格。
+---------+---------+--------+------------+
| 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查询中?
发布于 2018-10-21 20:36:51
如果没有具有相同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)))发布于 2018-10-21 20:22:53
不,这是过滤,而不是聚合:
SELECT ab.*
FROM auction_bids ab
WHERE ab.amount = (SELECT MAX(ab2.amount)
FROM auction_bids ab2
WHERE ab2.item_id = ab.item_id
);https://stackoverflow.com/questions/52919520
复制相似问题