Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como selecionar até que uma soma seja alcançada


Você precisa de alguma maneira de ordenar quais registros têm prioridade sobre outros ao somar suas unidades máximas. Caso contrário, como você sabe qual conjunto de registros que totaliza até 600 você mantém?
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

Esta é apenas uma consulta básica para você começar, e ainda há vários problemas a serem resolvidos:
  • Ele para em <=600, portanto, na maioria dos casos, você não preencherá exatamente o limite de tamanho. Isso significa que você pode querer ajustá-lo para permitir mais um registro. Por exemplo, se o primeiro registro for> 600, a consulta não retornará nada, e isso pode ser um problema.
  • Não fará nada para verificar se há registros menores adicionais posteriormente que ainda podem caber sob o limite.
  • Registros com valores de date_created idênticos podem ser 'contados duas vezes' aqui e ali.