Mysql 使用MAX()函数获得相等值的附加条件
我有一个简单的拍卖数据库。它包括一个包含投标的表Mysql 使用MAX()函数获得相等值的附加条件,mysql,sql,group-by,Mysql,Sql,Group By,我有一个简单的拍卖数据库。它包括一个包含投标的表 +---------+---------+--------+------------+ | item_id | user_id | amount | time | +---------+---------+--------+------------+ | 3 | 2 | 500 | 1540152972 | | 3 | 4 | 500 | 1540151466 | +----
+---------+---------+--------+------------+
| 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
在多个用户以相同的金额出价之前,它似乎工作正常
在这种情况下,我需要检索最早的一个,即:最低时间值
如何通过查询将其输入到我的组中?否,这是筛选,而不是聚合:
SELECT ab.*
FROM auction_bids ab
WHERE ab.amount = (SELECT MAX(ab2.amount)
FROM auction_bids ab2
WHERE ab2.item_id = ab.item_id
);
不,这是筛选,不是聚合:
SELECT ab.*
FROM auction_bids ab
WHERE ab.amount = (SELECT MAX(ab2.amount)
FROM auction_bids ab2
WHERE ab2.item_id = ab.item_id
);
如果没有其他具有相同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)))
如果没有其他具有相同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)))
您使用的是哪个MySQL版本?您的查询无论如何都是错误的。您可以按项目\u id分组,但选择用户\u id,而不指定用户。所以,你只要在每一个任意选择的项目中找到一个投标人。其他DBMS会引发错误,但MySQL会以静默方式将用户id转换为任何用户id。您可能需要考虑SET SqLyMyLoad =“OnLyFulyGulpPyBy”来帮助您解决这些情况。您使用的是哪种MySQL版本?您可以按项目\u id分组,但选择用户\u id,而不指定用户。所以,你只要在每一个任意选择的项目中找到一个投标人。其他DBMS会引发错误,但MySQL会以静默方式将用户id转换为任何用户id。您可能需要考虑SET SqLyMyLoad =“OnLyFull GypPyBy”来帮助您解决这些情况。