[英]SQL Query - group by more than one column, but distinct
我有一個招標表,如下:
SellID INT FOREIGN KEY REFERENCES SellItem(SellID),
CusID INT FOREIGN KEY REFERENCES Customer(CusID),
Amount FLOAT NOT NULL,
BidTime DATETIME DEFAULT getdate()
現在在我的網站上,我需要向用戶顯示當前的出價; 只有最高出價,但沒有重復相同的用戶。
SELECT CusID,
Max(Amount)
FROM Bid
WHERE SellID = 10
GROUP BY CusID
ORDER BY Max(Amount) DESC
這是迄今為止我取得的最好成績。 這為每個用戶的CusID提供了最高出價,並按升序排序。 但我也需要為每個結果獲得BidTime。 當我嘗試將BidTime放入查詢時:
SELECT CusID,
Max(Amount),
BidTime
FROM Bid
WHERE SellID = 10
GROUP BY CusID
ORDER BY Max(Amount) DESC
我被告知“列'Bid.BidTime'在選擇列表中無效,因為它不包含在聚合函數或GROUP BY子句中。”
因此,我試過:
SELECT CusID, Max(Amount), BidTime
FROM Bid
WHERE SellID = 10
GROUP BY CusID, BidTime
ORDER BY Max(Amount) DESC
但這會返回所有行。 沒有區別。 有關解決此問題的任何建議嗎?
采用:
SELECT b.cusid,
b.amount,
b.bidtime
FROM BID b
JOIN (SELECT t.cusid,
t.sellid,
MAX(t.amount) AS max_amount
FROM BID t
WHERE t.sellid = 10
GROUP BY t.cusid, t.sellid) x ON x.max_amount = b.amount
AND x.cusid = b.cusid
AND x.sellid = b.sellid
ORDER BY b.amount DESC
使用聚合意味着您無法在同一查詢中獲取該給定值的信息。 您必須將表的副本與聚合數據(連接是典型選擇)相關聯才能獲取相關信息。
一種方法,假設另一種思考方式是返回每個用戶的最新出價:
SELECT b.cusID, b2.LatestBidTime, b.Amount
FROM Bid b
JOIN (
SELECT cusID, MAX(BidTime) AS LatestBidTime
FROM Bid
WHERE SellID = 10
GROUP BY cusID) b2 ON b.cusID = b2.cusID AND b.BidTime = b2.LatestBidTime
WHERE b.SellID = 10
select b.*
from Bid b
inner join (
SELECT CusID, Max(Amount) as MaxBid
FROM Bid
WHERE SellID=10
GROUP BY CusID
) bm on b.CusID = bm.CusID and b.Amount = bm.MaxBid
where b.SellID = 10
ORDER BY b.Amount DESC
據推測,最近出價最高,對吧? 所以就把MAX
放在BidTime
。
SELECT CusID, Max(Amount), MAX(BidTime)
FROM Bid
WHERE SellID=10
GROUP BY CusID ORDER BY Max(Amount) DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.