you can do that with only one query SELECT param, max(date) , value FROM param_values GROUP BY param HAVING date=max(date)
_max_date = db.param_values.date.max() rows = db(db.param_values).select(db.param_values.param,_max_date, db.param_values.value, groupby=db.param_values.param, having=db.param_values.date=_max_date)