I wrote something like that to proportianlly shuffle newer vs older and better rated vs unrated songs. Warning, this is a bit of a monster:
[Media Type]=[audio] ~mix=100,26%,{date_archived=>=0y date_archived=<=0.3y rating=4,5 ~sort=random},14%,{date_archived=>=0y date_archived=<=0.3y rating=[] ~sort=random},23%,{date_archived=>=0.3y date_archived=<=0.9y rating=4,5 ~sort=random},7%,{date_archived=>=0.3y date_archived=<=0.9y rating=[] ~sort=random},17%,{date_archived=>=0.9y date_archived=<=1.5y rating=4,5 ~sort=random},3%,{date_archived=>=0.9y date_archived=<=1.5y rating=[] ~sort=random},9%,{date_archived=>=1.5y date_archived=<=100y rating=4,5 ~sort=random},1%,{date_archived=>=1.5y date_archived=<=100y rating=[] ~sort=random} ~sort=Random ~nodup=[Artist],[Name]
you could rename the parameters as necessary to get the effect you want. I wrote an excel sheet to generate the string for me.... now if I just could find it....
It's basically a set of searches that you can replace, that then get weighted against each other. You would need to create classes for this (e.g. 0-5 min; 5-10 min and so on).
Edit: Updated with correct import/export string