Mysql 使用SQL获取不同的行,但也获取这些行的整行

Mysql 使用SQL获取不同的行,但也获取这些行的整行,mysql,sql,Mysql,Sql,好的,举个例子比较容易,希望有些人有一个解决方案: 我有一张桌子,上面有出价: ID | companyID | userID | contractID | bidAmount | dateAdded 下面是表中可能包含的一组行的示例: ID | companyID | userID | contractID | bidAmount | dateAdded -------------------------------------------------------------- 10 | 2

好的,举个例子比较容易,希望有些人有一个解决方案:

我有一张桌子,上面有出价:

ID | companyID | userID | contractID | bidAmount | dateAdded
下面是表中可能包含的一组行的示例:

ID | companyID | userID | contractID | bidAmount | dateAdded
--------------------------------------------------------------
10 | 2         | 1      | 94         | 1.50      | 1309933407
9  | 2         | 1      | 95         | 1.99      | 1309933397
8  | 2         | 1      | 96         | 1.99      | 1309933394
11 | 103       | 1210   | 96         | 1.98      | 1309947237
12 | 2         | 1      | 96         | 1.97      | 1309947252
好的,我想做的是能够获得所有的信息,比如在一个普通的select语句中,使用*对每个唯一的收缩语句进行最低出价

因此,我需要以下行:

ID = 10 (for contractID = 94)
ID = 9 (for contractID - 95)
ID = 12 (for contractID = 96)
我想忽略所有其他人。我曾考虑过使用DISTINCT,但我无法让它返回所有列,只返回我用于DISTINCT的列

有人有什么建议吗

谢谢, 杰夫


请注意,如果有多条记录共享相同的最低出价,这将返回多行。

您可以使用子查询查找每个压缩的最低rowid:

select  *
from   YourTable
where  id in 
       (
       select  min(id)
       from    YourTable
       group by
               ContractID
       )

问题是distinct不返回特定的行—它返回distinct值,根据定义,这可能发生在多行上


子查询是您的答案,而上述建议中的某个地方可能就是答案。子查询需要返回ID或具有最小值的行。然后,您可以从具有这些ID的行中选择*。

没有对其进行测试,但应该可以使用此查询,尽管它可能不是很快:

SELECT * FROM bids WHERE ID IN (
  SELECT ID FROM bids GROUP BY contractID ORDER BY MIN(bidAmount) ASC
)

这将是对MySQL的查询,也许你需要将其调整为另一个db。

他想要的是最低的出价,而不是最低的ID。@Daniel Hilgarth:好的,我将投票支持Bohemian的答案,而不是更新这个答案。你太棒了:非常感谢!与其让它成为一个相关子查询,不如通过收缩执行一个MINBidAmount组。这不会返回其他列,如userID等,是吗?我测试它时就这样做了,返回了我需要的所有内容。@JNK:现在清楚了,谢谢。如果一份合同的投标与另一份合同的最低投标相同,则可能返回错误结果。我认为它应该更像这样:其中Bidamount,在SELECT MINBidamount中收缩,在Mytable组中收缩,大约在。谢谢,它回答了我的问题,但你是对的,速度太慢了
SELECT * FROM bids WHERE ID IN (
  SELECT ID FROM bids GROUP BY contractID ORDER BY MIN(bidAmount) ASC
)