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

Sådan vælger du indtil en sum er nået

Du har brug for en måde at ordne, hvilke poster der får prioritet frem for andre, når du lægger op til dine maks. enheder. Ellers, hvordan ved du, hvilket sæt poster, der i alt er op til 600, du beholder?

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

Dette er blot en grundlæggende forespørgsel for at komme i gang, og der er en række problemer, der stadig skal løses:

  • Det stopper ved <=600, så i de fleste tilfælde vil du ikke udfylde din størrelsesgrænse nøjagtigt. Det betyder, at du måske ønsker at justere den for at tillade en optagelse mere. For eksempel, hvis den første post er> 600, returnerer forespørgslen intet, og det kan være et problem.
  • Den vil ikke gøre noget for at søge efter yderligere mindre poster senere, som stadig kan passe under hætten.
  • Records med identiske date_created-værdier kunne være en slags 'dobbelttalte' her og der.


  1. Erstat alle felter i MySQL

  2. Er der en anden måde at implementere dette program på uden at bruge indlejret while-løkke?

  3. Hvad er MySQL's standard ON SLET-adfærd?

  4. Hvordan ændres BRUGERNAVN og ADGANGSKODE i MySQL?