Sql server 使用SQL Server中的其他列值选择列中的最高值
我的桌子看起来像这样: 我想用行id获取特定产品的最高出价金额。我的查询如下Sql server 使用SQL Server中的其他列值选择列中的最高值,sql-server,sql-server-2016,Sql Server,Sql Server 2016,我的桌子看起来像这样: 我想用行id获取特定产品的最高出价金额。我的查询如下 SELECT MAX(BidAmount) as highestBid,id FROM [wf_bid] WHERE ProductId = 101 AND ClientId = 101 GROUP BY id 我只希望有一行具有最高的BidAmount,但查询返回具有此产品id和客户id的所有行。我如何解决此问题?您的问题在group by id中,它不起作用,因为它不
SELECT
MAX(BidAmount) as highestBid,id
FROM
[wf_bid]
WHERE
ProductId = 101 AND ClientId = 101
GROUP BY
id
我只希望有一行具有最高的
BidAmount
,但查询返回具有此产品id和客户id的所有行。我如何解决此问题?您的问题在group by id中,它不起作用,因为它不是“添加您的出价”它告诉你每个ID的最大数量,不仅仅是哪一个是最大的出价和它的ID。我猜如果你按ID删除分组,你会得到你想要的。如果不是,你需要进一步解释你的需要。你的问题在按ID分组,它不起作用,因为它不是“添加你的出价”它告诉您每个ID的最大编号,不仅仅是哪个是最大的出价和它的ID。我猜如果您按ID删除分组,您将得到您想要的。如果不是,您需要进一步解释您的需要。您可以使用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
您可以使用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
子查询怎么样?如果有多条记录具有相同的BidAmount,则返回top 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)
子查询怎么样?如果有多条记录具有相同的BidAmount,则返回top 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)
这样怎么样:
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
这样怎么样:
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
这样试试看
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
这样试试看
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
请使用创建脚本和一些虚拟数据更新问题您的条件是否有示例数据?请使用创建脚本和一些虚拟数据更新问题您的条件是否有示例数据?在“=”附近抛出此错误消息102,级别15,状态1,第4行语法错误。抱歉。我已经编辑了我的答案。Where子句丢失。在“=”附近抛出错误消息102,级别15,状态1,第4行。抱歉。我已经编辑了我的答案。缺少Where子句。您应该对SQL关键字的拼写保持一致-要么使用全大写,要么使用“全小写”,要么使用“混合”-选择其中任何一个并坚持它-不要更改每个关键字的拼写-那只是一团混乱…..感谢@marc_s的提醒您应该保持SQL关键字拼写的一致性-要么使用全大写,要么“全小写”,要么“混合”-选择其中任何一个并坚持它-不要用每个关键词改变拼写-那只是一团糟…..谢谢@marc_s的提醒