I have a table of the following structure (simplified): Table orders - id - created - name - executed - category_id I need a list of n orders from distinct categories (if `n` is 5, I should have at most 5 different categories, and never two same categories). I successfully done this one using the following request : SELECT name FROM orders WHERE executed IS NULL GROUP BY category_id LIMIT 5; But I'd need to exclude the categories that has already been processed less than an hour ago. For that, I was able to do the following query : SELECT name, category_id FROM orders WHERE executed IS NULL AND category_id NOT IN (SELECT category_id FROM orders WHERE executed > (UTC_TIMESTAMP() - INTERVAL 60 MINUTE) GROUP BY category_id) GROUP BY category_id LIMIT 5; But I was wondering if there was a faster way to get the results. I've made an [SQLFiddle to show my example][1], but I find it quite slow and I was not able to get a successful result from them. [1]: http://sqlfiddle.com/#!9/5d663