Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment sélectionner jusqu'à ce qu'une somme soit atteinte

Vous avez besoin d'un moyen de classer les enregistrements qui ont la priorité sur les autres lors de l'ajout de vos unités maximales. Sinon, comment savez-vous quel ensemble d'enregistrements totalisant jusqu'à 600 conservez-vous ?

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

Il ne s'agit que d'une question de base pour vous aider à démarrer, et il reste encore un certain nombre de problèmes à résoudre :

  • Elle s'arrête à <=600, donc dans la plupart des cas, vous n'atteindrez pas exactement votre limite de taille. Cela signifie que vous voudrez peut-être le modifier pour autoriser un enregistrement de plus. Par exemple, si le premier enregistrement est> 600, la requête ne renverra rien, et cela pourrait être un problème.
  • Cela ne fera rien pour vérifier ultérieurement d'autres enregistrements plus petits qui pourraient encore tenir sous le plafond.
  • Les enregistrements avec des valeurs date_created identiques pourraient être en quelque sorte "comptés deux fois" ici et là.