I use a very similar query in one of my databases with no performance problems whatsoever.
Assuming that you're actually calling the date field [Date], the first thing I would try is changing the name of field in your tables. Date is a function in VBA and you may be causing Access to have to decide whether you mean the field or the VBA function.
If you choose not to rename the [Date] field, be sure that you bracket it ([]) everywhere it is used.
Another thing you might try is putting an index on the date field (allowing duplicates).
Last thing that won't necessarily improve performance is used the aggregate function DMax. e.g.
WHERE A.[Date] = DMax("[Date]","[qry_Item_Actions]","[Action_Item_ID] = " & A.[Action_Item_ID])
I've heard that aggregate functions are slower.
Also, I wonder if you really need the query in your subselect. It looks like the Action_Item_ID and [Date] field will be in the same table. (I'm making an assumption about your table design.) If so, why not just go right to the table that contains the Action_Item_ID and the [Date] field for your subselect?
And lastly, the query looks like you should just do a group by, but I don't know what [ID] and [ActionDetail] are. You could build a query that just gets the latest (Call it qry_Item_Actions_Latest):
Select [Action_Item_ID], Max([Date]) As MaxDate
From qry_Item_Actions
Group by [Action_Item_ID]
Then join:
Select A.[Action_Item_ID], [ID], [ActionDetail], B.[MaxDate]
From qry_Item_Actions as A Inner Join qry_Item_Actions_Latest As B On A.Action_Item_ID = B.Action_Item_ID
I wrote that SQL from scratch, so it may not be exact.
Randall J Weers
Membership Vice President
Pacific NorthWest Access Developers Group
http://www.pnwadg.org