2017-02-27 123 views
0

我的表看起來像這樣:與另一列列選擇最高值值的SQL Server

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的所有行。我該如何解決這個問題?

+0

請更新問題與創建腳本和一些虛擬數據你的條件 –

+0

你有一個示例數據? –

回答

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) 
+0

引發此錯誤消息102,級別15,狀態1,行4 '='附近的語法不正確。 – Athul

+0

對不起。我編輯了我的答案。 Where子句丟失。 – Pradeep

-1

你的問題是按ID編組,它不會以這種方式工作,因爲它不是「增加你的出價」,它告訴你每個ID的最大數量,而不僅僅是最大的出價,它是ID 。我猜你會得到你想要的,如果你刪除組ID。如果沒有,您需要進一步解釋您的需求。

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

怎麼樣這樣:

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 
+0

關於你如何拼寫你的SQL關鍵字,你應該是**一致的**要麼使用全部大寫,要麼「全部小寫」,或「混合」 - 選擇其中的任何一個,並堅持** - 不要改變你的拼寫與每個關鍵字 - 這只是一個爛攤子..... –

+1

感謝@marc_s的擡頭 –

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 
相關問題