如何从表中选择具有最小值的记录?

时间:2015-09-04 20:29:29

标签: sql sql-server sql-server-2008 sql-server-2012

我有表BIDS,它包含很多列和行,但我只想选择包含最低BIDPRICE的行。

Select min(Cast(Bids.BidPrice as INT)), BidBidderName from bids BidBidderName

但是它会抛出错误

  

列'bid.BidBidderName'在选择列表中无效,因为它   不包含在聚合函数

当我将BidderName放入Group时,它会显示所有记录,但我只想要包含最低出价的记录。

4 个答案:

答案 0 :(得分:1)

这是一个只能获得价格最低的行的选项。

Select top 1 BidPrice
    , BidBidderName 
from bids
order by Cast(BidPrice as INT)

答案 1 :(得分:0)

您可以使用子查询:

Select BidPrice, BidBidderName from bids 
where Bids.BidPrice in (Select  min(Cast(b.BidPrice as INT)) from bids b)

INNER JOIN

Select b1.BidPrice, b1.BidBidderName from bids b1
inner join (select Min(BidPrice) BidPrice from @bids) as b2 on b.BidPrice = b2.BidPrice

答案 2 :(得分:0)

如果您只想要具有最低出价的行,则解决方案是使用子查询来查找最低价格,如下所示:

Select  BidPrice, BidBidderName 
from bids 
where BidPrice = (select min(Cast(BidPrice as INT)) from bids)

如果BidPrice是货币或数字类型(它很可能应该是),则不需要转换为int。

如果你这样做

Select Min(BidPrice) BidPrice, BidBidderName 
from bids 
group by BidBibberName

您将获得每个竞标者的最低出价。

答案 3 :(得分:0)

尝试:

  

ROW_NUMBER()

;with cte1 
as
(
select BidderName ,BidPrice,Row_Number() Over(order by price asc) as rn from bids
)
select * from cte1 where rn=1;

或者

  

最小(BidPrice)结束(按价格asc分配BidderName顺序)

select top 1 BidderName ,Min(BidPrice) Over(PARTITION BY BidderName order by price asc) as minBidPrice from bids