好了,举个例子比较容易,希望有些人能有解决方案:
我有一张桌子,里面有标书:
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语句中使用*),每个唯一的contractID的最低出价。
因此,我需要以下几行:
ID = 10 (for contractID = 94)
ID = 9 (for contractID - 95)
ID = 12 (for contractID = 96)我想忽略所有其他的。我考虑过使用DISTINCT,但我无法让它返回所有列,只返回用于distinct的列。
有人有什么建议吗?
谢谢,杰夫
发布于 2011-07-06 19:54:48
select *
from mytable main
where bidAmount = (
select min(bidAmount)
from mytable
where contractID = main.contractID)请注意,如果有多个记录共享相同的最低竞价,这将返回多个行。
发布于 2011-07-06 19:59:39
我没有对它进行测试,但是使用这个查询应该是可能的,尽管它可能不是很快:
SELECT * FROM bids WHERE ID IN (
SELECT ID FROM bids GROUP BY contractID ORDER BY MIN(bidAmount) ASC
)这可能是针对MySQL的查询,也许您需要为另一个数据库调整它。
发布于 2011-07-06 19:54:56
您可以使用子查询来查找每个收缩to的最低行to:
select *
from YourTable
where id in
(
select min(id)
from YourTable
group by
ContractID
)https://stackoverflow.com/questions/6595881
复制相似问题