You could do it with 2 queries as Paul's sample showed.
First query (query51)
Code:
SELECT TestProducts.Prodnumber
,Max(TestProducts.PurchaseDate) AS MaxPurchaseDate
FROM TestProducts
WHERE (((TestProducts.PurchaseDate) < #6/1/2014#))
GROUP BY TestProducts.Prodnumber;
Second query:
Code:
SELECT TestProducts.Prodnumber
,TestProducts.PurchaseDate
,TestProducts.PurchasePrice
FROM TestProducts
INNER JOIN Query51 ON
(TestProducts.PurchaseDate = Query51.MaxPurchaseDate)
AND
(TestProducts.Prodnumber = Query51.Prodnumber);