Вам нужен какой-то способ упорядочить, какие записи имеют приоритет над другими при суммировании с вашими максимальными единицами. В противном случае, откуда вы знаете, какой набор записей на общую сумму до 600 вы храните?
SELECT d.id, d.size, d.date_created
FROM documents d
INNER JOIN documents d2 ON d2.tag_id=d.tag_id AND d2.date_created >= d.date_created
WHERE d.tag_id=26
GROUP BY d.id, d.size, d.date_created
HAVING sum(d2.size) <= 600
ORDER BY d.date_created DESC
Это просто базовый запрос, с которого можно начать, и есть еще ряд проблем, которые необходимо решить:
- Он останавливается на <= 600, поэтому в большинстве случаев вы не будете точно заполнять свой лимит размера. Это означает, что вы можете настроить его, чтобы разрешить еще одну запись. Например, если первая запись> 600, запрос ничего не даст, и это может быть проблемой.
- В дальнейшем он ничего не сделает, чтобы проверить дополнительные записи меньшего размера, которые все еще могут поместиться под заглушкой.
- Записи с одинаковыми значениями date_created могут быть как бы «посчитаны дважды» тут и там.
редактировать
Обновлено, поскольку он добавил информацию, которую он сортирует по дате.