This is a tricker query to create using the Query grid. This type of query is more easily done in SQL using a subquery - actually a "correlated subquery".
You can use the Max() SQL aggregate function to get the latest Invoice Date FOR ALL RECORDS. But when you want to get the latest value for a "group" then you'll need the correlated sub-query.
The Last() aggregate function does not do this! Its usefulness is extremely limited.
I suspect the query you need looks something like this:
SELECT [Item Number], [NDC number], [Invoice Date], [Unit Cost], [Item Description]
FROM [color="red"]yourTableNameHere[/color] y
WHERE [Item Number] = (
SELECT TOP 1 [Item Number]
WHERE [Item Number] = y.[Item Number] ORDER BY [Invoice Date] DESC
ORDER BY [Item Number];
replace the red text with your table name.
As an aside, it is not good database design to have all this info in one table. It would appear that the fields:
[NDC number], [Invoice Date], [Unit Cost], [Item Description]
are all dependent on the [Item Number] field and thus should be in an "Items" table.
Also, field names with spaces on them are frowned upon since they often cause difficult-to-resolve issues in Access.