sql >> Databasteknik >  >> RDS >> Mysql

Hur man väljer tills en summa uppnås

Du behöver något sätt att ordna vilka poster som får prioritet framför andra när du lägger till dina maxenheter. Annars, hur vet du vilken uppsättning poster som totalt uppgår till 600 du behåller?

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

Det här är bara en grundläggande fråga för att komma igång, och det finns ett antal problem att lösa:

  • Det stannar vid <=600, så i de flesta fall kommer du inte att fylla upp din storleksgräns exakt. Det betyder att du kanske vill justera den för att tillåta ytterligare en post. Till exempel, om den första posten är> 600 returnerar frågan ingenting, och det kan vara ett problem.
  • Det kommer inte att göra något för att leta efter ytterligare mindre poster senare som fortfarande kan få plats under locket.
  • Post med identiska date_created-värden kan vara typ "dubbelräknade" här och där.


  1. Anslutning till SQL Server fungerar ibland

  2. Hur man formaterar siffror i SQL Server

  3. Gör en ackumulerad summa i view oracle

  4. Gå med i två MySQL-tabeller med PHP