首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL获取不同的行,还可以获取这些行的整个行

使用SQL获取不同的行,还可以获取这些行的整个行
EN

Stack Overflow用户
提问于 2011-07-06 19:51:00
回答 4查看 630关注 0票数 2

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

我有一张桌子,里面有标书:

代码语言:javascript
复制
ID | companyID | userID | contractID | bidAmount | dateAdded

下面是表中可能存在的一组行的示例:

代码语言:javascript
复制
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的最低出价。

因此,我需要以下几行:

代码语言:javascript
复制
ID = 10 (for contractID = 94)
ID = 9 (for contractID - 95)
ID = 12 (for contractID = 96)

我想忽略所有其他的。我考虑过使用DISTINCT,但我无法让它返回所有列,只返回用于distinct的列。

有人有什么建议吗?

谢谢,杰夫

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-06 19:54:48

代码语言:javascript
复制
select *
from mytable main
where bidAmount = (
    select min(bidAmount)
    from mytable
    where contractID = main.contractID)

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

票数 6
EN

Stack Overflow用户

发布于 2011-07-06 19:59:39

我没有对它进行测试,但是使用这个查询应该是可能的,尽管它可能不是很快:

代码语言:javascript
复制
SELECT * FROM bids WHERE ID IN (
  SELECT ID FROM bids GROUP BY contractID ORDER BY MIN(bidAmount) ASC
)

这可能是针对MySQL的查询,也许您需要为另一个数据库调整它。

票数 1
EN

Stack Overflow用户

发布于 2011-07-06 19:54:56

您可以使用子查询来查找每个收缩to的最低行to:

代码语言:javascript
复制
select  *
from   YourTable
where  id in 
       (
       select  min(id)
       from    YourTable
       group by
               ContractID
       )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6595881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档