在具有其他列值SQL Server的列中选择最高值

时间:2017-02-27 05:50:15

标签: sql-server sql-server-2016

我的表格如下:

enter image description here

我希望获得具有行ID的特定产品的最高出价金额。我的查询是这样的

SELECT 
    MAX(BidAmount) as highestBid,id
FROM 
    [wf_bid]  
WHERE
    ProductId = 101 AND ClientId = 101  
GROUP BY
    id

我希望只有一行具有最高BidAmount,但查询会返回具有此产品ID和客户端ID的所有行。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

您可以使用row_number()并选择第一行:

SELECT *
FROM
(
   SELECT
     id,
     BidAmount,
     ROW_NUMBER() OVER (ORDER BY BidAmount desc) as rn
   FROM
     [wf_bid]
   WHERE ProductId = 101 and ClientId = 101
) i
WHERE
   i.rn = 1

答案 1 :(得分:1)

子查询怎么样?如果您有多个具有相同BidAmount的记录,则返回前1。

 SELECT TOP 1
      BidAmount as highestBid,id
  FROM [wf_bid] WHERE BidAmount = (Select Max(BidAmount) FROM [wf_bid] WHERE ProductId=101 and ClientId=101)

答案 2 :(得分:1)

这样怎么样:

SELECT id,highestBid from
(Select Max(BidAmount)highestBid,productID,clientid FROM [wf_bid] WHERE ProductId=101 and ClientId=101) a
LEFT JOIN
(SELECT id,productID,clientid FROM [wf_bid]) as b
where a.productID = b.productid and a.clientid = b.clientid

答案 3 :(得分:1)

试试这个,

select * FROM
(SELECT
     id,
     BidAmount,
     ROW_NUMBER() OVER (parrtition by ProductId ORDER BY BidAmount desc) as rn
   FROM
     [wf_bid]
     WHERE ClientId = 101)t4
     where rn=1

答案 4 :(得分:-1)

您的问题出现在ID中的组中,因为它不是“添加您的出价”而无法正常工作,它会告诉您每个ID的最大数量,而不仅仅是最高出价和ID。如果您按ID删除分组,我猜你会得到你想要的东西。如果没有,您需要进一步解释您的需求。