繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM