sql >> Database >  >> RDS >> Mysql

Hoe te selecteren totdat een bedrag is bereikt

U hebt een manier nodig om te ordenen welke records voorrang krijgen op andere bij het optellen tot uw maximale eenheden. Hoe weet u anders welke reeks records die in totaal 600 is, u bijhoudt?

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

Dit is slechts een basisvraag om u op weg te helpen, en er zijn nog een aantal problemen die moeten worden opgelost:

  • Het stopt bij <=600, dus in de meeste gevallen vult u uw maatlimiet niet precies op. Dit betekent dat je het misschien wilt aanpassen om nog een record toe te staan. Als het eerste record bijvoorbeeld> 600 is, levert de query niets op, en dat kan een probleem zijn.
  • Het zal niets doen om later te controleren op aanvullende kleinere records die misschien nog onder de dop passen.
  • Records met identieke date_created-waarden kunnen hier en daar een soort van 'dubbel geteld' zijn.


  1. Asynchrone replicatie instellen tussen MariaDB Galera-clusters

  2. Optimaal aantal verbindingen in verbindingspool

  3. MySQL-cursor voor opgeslagen procedures voor voorbereide instructies

  4. Gemeenschappelijke tabelexpressie in MySQL