好的,所以更容易举一个例子,希望有些人有解决方案:
我有持有出价的表格:
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,但是我无法让它返回所有列,只有我用于不同的列。
有人有任何建议吗?
谢谢, 杰夫
答案 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的行中选择*。