GROUP BY
не поможет. Будет ли это возможно, во многом зависит от ваших данных. По сути, вам понадобится замысловатый ORDER BY
, который взломал что-то вместе на основе других значений.
Например, используя приведенные вами примеры данных, вы можете использовать:
ORDER BY FLOOR(project_id / 10), client_id
Это вряд ли будет полезно для ваших реальных данных, но дает представление о том, что вам нужно взять отдельное поле, сделать некоторые подмножества этих данных эквивалентными для целей сортировки (в данном случае все с тем же Значение 10 с) и имеют вторичную сортировку по client_id.
Хотя это сильно зависит от окончательной формулы, что-то вроде этого должно быть относительно стабильным, поэтому добавление нумерации страниц, например, через
LIMIT 10, 10
должен возвращать согласованные результаты.
Конечно, выполнение этого означает, что вы не получаете никаких преимуществ от наличия индексов, поэтому, если у вас много строк, это будет в конечном итоге медленнее, чем что-то делать с циклами / отдельными запросами.