The query won't work as is, for several reasons. The main reason is that the counts of items will change as you delete them, so the engine can't keep track of what to delete.
That being said, your query doesn't really make sense. The Last function should not be on the same column as the Count. Otherwise you are going to delete every duplicate, not just the last one of each duplicate.
If you have a primary key, you could do this in two steps. If you don't, it will take extra steps because you need a unique field:
Alternate Step if you have no primary key: Add an Autonumber field called RecordId. If you already have a primary key use it instead of RecordId in following steps.
First, create a temp table with the Ids you want to delete. We'll call this temp_Delete:
SELECT Last([RecordId]) AS LastId INTO temp_Delete
FROM tblDat01Prod
GROUP BY [MFG #]
HAVING Count([MFG #])>1
Second, run a delete statement which uses the temp_Delete table to limit what you are deleting. You will join on the RecordId field (caveat: you may not be able to do this in the visual editor because it will mess up your sql. You'll have to write and run it manually.)
DELETE DISTINCTROW tblDat01Prod.*
FROM tblDat01Prod INNER JOIN temp_Delete
ON tblDat01Prod.RecordId = temp_Delete.LastId
Safety Step: If you are at all concerned about losing important data, I would advise injecting another step before the delete. Add a boolean IsDelete column to tblDat01Prod and use the temp_Delete table to update matching fields to True. Then compare which records are set to be deleted and which aren't before you delete. Then delete records where IsDelete is true rather than Step 2 above.
Finally, delete your temp_Delete table and any fields you added to tblDat01Prod that you don't want to retain.