does it take that long using SQL server? if so, nothing is going to help.
I would suggest using a stored proc, at least you can time how long it takes to execute and the parameter that you enter can be passed to the stored proc. I could be wrong, but this is how crystal was designed to work...I don't think that they meant for the report to get all of its data from a command.
last, depending on what else is happening, the report may be getting an abundance of information and is taking a long time to format the report...the actual data may only be a short time, but formatting, grouping, subreports (especially subreports) may be taking longer.
last...ok really this time...
SELECT MAX(po1.LAST_RECEIVED_DATE)LastRecieved, PART_ID, UNIT_PRICE, PURC_ORDER_ID, ORDER_QTY, LAST_RECEIVED_DATE, PURCHASE_UM
FROM dbo.PURC_ORDER_LINE po
WHERE LAST_RECEIVED_DATE < '01/01/ 2008'
GROUP BY Part_id, last_received_date, unit_price, purc_order, order_qty, purchase_um
OR
SELECT PART_ID, UNIT_PRICE, PURC_ORDER_ID, ORDER_QTY, LAST_RECEIVED_DATE, PURCHASE_UM
FROM dbo.PURC_ORDER_LINE po
JOIN (SELECT MAX(po1.LAST_RECEIVED_DATE) AS MaxDate, PART_ID
FROM PURC_ORDER_LINE AS po1
WHERE LAST_RECEIVED_DATE < '01/01/ 2008')
GROUP BY Part_ID) po1 ON po1.part_id=po.part_id and po.LAST_RECEIVED_DATE = po1.MaxDate
Hope one of these ideas helps you out.