One way that's built-in is to use the agenda view to use the "logbook" journal of state changes with times that you can get org-mode to keep.
You can define logging for state transitions with your org-todo-keywords
setings (there are a lot of options about what transitions to log -- see the documentation at https://orgmode.org/manual/Tracking-TODO-state-changes.html#Tracking-TODO-state-changes). The following is the example from the documentation, the "@" and "!" markers request these log entries to be created for some selected states:
(setq org-todo-keywords
'((sequence "TODO(t)" "WAIT(w@/!)" "|" "DONE(d!)" "CANCELED(c@)")))
You probably also want to keep those entries tidy by keeping them in a "drawer" with:
(setq org-log-into-drawer t)
Once you've done that and you have a :LOGBOOK:
drawer being maintained in your task, you can view them in the agenda.
Do that by typing v [
in your agenda (view inactive timestamps).
You can then skip back and forwards by with b
and f
.
Not directly related to the question, but if you're looking to track time and activity you should probably also investigate clocking (https://orgmode.org/manual/Clocking-work-time.html), and org-clock-into-drawer
to keep clock entries tidied in a similar way to state changes). You can then view times in the agenda with v c
(clockcheck) or use "clocktables" to get time spent on tasks for timesheets etc.