sql >> Base de Datos >  >> RDS >> Mysql

Cómo seleccionar hasta llegar a una suma

Necesita alguna forma de ordenar qué registros tienen prioridad sobre otros al sumar sus unidades máximas. De lo contrario, ¿cómo sabe qué conjunto de registros que suman 600 mantiene?

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 es solo una consulta básica para comenzar, y aún quedan varios problemas por resolver:

  • Se detiene en <=600, por lo que en la mayoría de los casos no llenará su límite de tamaño exactamente. Esto significa que es posible que desee modificarlo para permitir un registro más. Por ejemplo, si el primer registro es> 600, la consulta no devolverá nada y eso podría ser un problema.
  • No servirá de nada buscar registros adicionales más pequeños más adelante que aún puedan caber debajo del límite.
  • Los registros con valores de fecha_creación idénticos podrían tener una especie de 'conteo doble' aquí y allá.