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

时间:2011-07-06 11:51:00

标签: mysql sql

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

我有持有出价的表格:

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

好的,我想做的是能够获得所有信息(例如在正常的选择语句中使用*)每个唯一合同ID的最低出价。

所以我需要以下几行:

ID = 10 (for contractID = 94)
ID = 9 (for contractID - 95)
ID = 12 (for contractID = 96)

我想忽略所有其他人。我想过使用DISTINCT,但是我无法让它返回所有列,只有我用于不同的列。

有人有任何建议吗?

谢谢, 杰夫

4 个答案:

答案 0 :(得分:6)

select *
from mytable main
where bidAmount = (
    select min(bidAmount)
    from mytable
    where contractID = main.contractID)

请注意,如果有多个记录共享相同的最低出价,则会返回多行。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

问题是distinct不返回特定的行 - 它返回不同的值,(根据定义)可能会在多行上发生。

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