This looks like a fair job for a whole plugin, as Vim does not track commmands' "frequency usage".
However, you can make some sort of a "poor man" solution instantly:
Create a temporary buffer (or use some sort of a "scratch" plugin).
Whenever a "useful" command was issued, go to your "scratch" buffer and add the content of a register :
into it. For example, ":P.
To execute a "useful" command you'll need a mapping:
nnoremap <buffer><CR> 0y$<C-W>p:<C-R>0
I.e.: copy current line; switch to previous window; open cmdline and put yanked text there.
Now go to your "scratch" buffer and press Enter to compose a command-line.
To develop this stuff into "production-ready" form consider the following changes:
Design some sort of cool UI instead (buffer-based or popup-based).
Trap CmdlineLeave
to automate command list tracking.
Add buffer-mappings automatically.