Mysql
 sql >> Database >  >> RDS >> Mysql

Come selezionare fino a raggiungere una somma

Hai bisogno di un modo per ordinare quali record hanno la priorità sugli altri quando si sommano alle tue unità massime. Altrimenti, come fai a sapere quale set di record per un totale fino a 600 conservi?

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

Questa è solo una query di base per iniziare e ci sono ancora una serie di problemi da risolvere:

  • Si ferma a <=600, quindi nella maggior parte dei casi non riempirai esattamente il limite di dimensioni. Ciò significa che potresti volerlo modificare per consentire un altro record. Ad esempio, se il primo record è> 600, la query non restituirà nulla e potrebbe essere un problema.
  • Non servirà a nulla controllare in seguito ulteriori record più piccoli che potrebbero rientrare ancora nel limite.
  • I record con valori date_created identici potrebbero essere "contati due volte" qua e là.