sql >> Databáze >  >> RDS >> Mysql

Jak vybírat, dokud není dosaženo součtu

Potřebujete nějaký způsob, jak uspořádat, které záznamy mají přednost před ostatními, když se sčítají vaše maximální jednotky. V opačném případě, jak víte, kterou sadu záznamů s celkovým počtem až 600 uchováváte?

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

Toto je pouze základní dotaz, který vám pomůže začít, a zbývá vyřešit řadu problémů:

  • Zastaví se na <=600, takže ve většině případů svůj limit velikosti nenaplníte přesně. To znamená, že jej možná budete chtít vyladit, abyste umožnili ještě jeden záznam. Pokud je například první záznam> 600, dotaz nevrátí nic a to může být problém.
  • Pozdější kontrola dalších menších záznamů, které by se ještě mohly vejít pod víčko, nic neudělá.
  • Záznamy s identickými hodnotami date_created lze tu a tam započítat „dvojitě“.


  1. Když princip DRY neplatí:BITWISE operace v SQL Serveru

  2. Odhad mohutnosti predikátu na výrazu COUNT

  3. Jak zjistit, zda hodnota obsahuje alespoň jednu číselnou číslici v MySQL

  4. Jak EXP() funguje v MariaDB