Yes I still think this is wrong.
I originally thought Closed Date was a table field but it appears to just be an expression in your query based on status field so the value will change ....
If status -= 'closed', Closed Date = current date
If closed date > completion date then expr2 is late
BUT because closed date isn't fixed for each record, Expr2 will also change
I've copied your 4 records & your query into the attached database and added a new completed record for today's date 28/06/2018
This is what I think the results should be:
Records 1 & 3 should be on time
if they were completed before 28/06/2018
Record 2 is clearly late.
Record 4 is currently on time but will be late if its not closed on 29/06
Record 5 is designed to illiustrate my previous point. Its closed so its on time but using your query it will be shown as late tomorrow
In my opinion, Closed Date (preferably with no space) needs to be a table field.
When the task is completed, the current date should be assigned to it.
The status field can be determined from that if it is needed.
The Expr2 field in my view should have 3 options: Later/On Time and Open (or Null)
The Expr2 field will be set when the task is closed and the date stored. It should not change when thew query is run on subsequent dates
The whole thing might be clearer if you rename fieds:
Completed Date => DueDate
Closed date => CompletedDate
Hope that makes sense
: