You need to use a JOIN, combined with a subquery using a GROUP BY.
The GROUP BY will aggregate records together by product, and you can select the ProductCode and the MAX(BidDate) for each record:
SELECT ProductCode, MAX(BidDate) AS LastBidDate
FROM Purchases
GROUP BY ProductCode
You can then use that to retrieve the rest of the bid row:
SELECT * FROM Purchases a
JOIN (SELECT ProductCode, MAX(BidDate) AS LastBidDate
FROM Purchases
GROUP BY ProductCode ) g
ON a.ProductCode = g.ProductCode AND a.BidDate = g.LastBidDate
Then it's a trivial JOIN to add in the other info you need.