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:
'((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
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.