使用MAX()函数获得相等值的附加条件

时间:2018-10-21 20:21:51

标签: mysql sql group-by

我有一个简单的拍卖数据库。它包含一个包含出价的表。

SELECT item_id, user_id, MAX(amount)
FROM auction_bids
GROUP BY item_id

在拍卖结束时,我需要找到哪些用户赢得了哪些项目(金额最高)。我考虑过以下查询

time

在多个用户以相同的价格出价之前,它似乎可以正常工作。

在这种情况下,我需要检索最早的那个(即最低的GROUP BY值)。

如何在compile 'org.openjdk.jol:jol-core:0.9'查询中使用它?

2 个答案:

答案 0 :(得分:2)

如果没有其他具有相同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)))

答案 1 :(得分:0)

不,这是过滤,而不是聚合:

SELECT ab.*
FROM auction_bids ab
WHERE ab.amount = (SELECT MAX(ab2.amount)
                   FROM auction_bids ab2
                   WHERE ab2.item_id = ab.item_id
                  );