Potrzebujesz sposobu na uporządkowanie, które rekordy mają pierwszeństwo przed innymi podczas dodawania do maksymalnej liczby jednostek. W przeciwnym razie, skąd wiesz, który zestaw rekordów, który łącznie liczy do 600, przechowujesz?
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
To tylko podstawowe zapytanie na początek, a do rozwiązania pozostało jeszcze wiele problemów:
- Zatrzymuje się na <=600, więc w większości przypadków nie wypełnisz dokładnie swojego limitu rozmiaru. Oznacza to, że możesz chcieć go poprawić, aby zezwolić na jeszcze jeden rekord. Na przykład, jeśli pierwszy rekord ma wartość> 600, zapytanie nie zwróci nic, co może stanowić problem.
- Nie zrobi nic, aby później sprawdzić dodatkowe mniejsze rekordy, które mogą nadal zmieścić się pod czapką.
- Rekordy z identycznymi wartościami date_created mogą być tu i tam liczone podwójnie.