Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So wählen Sie aus, bis eine Summe erreicht ist

Sie müssen eine Möglichkeit haben, zu ordnen, welche Datensätze Vorrang vor anderen haben, wenn Sie Ihre maximalen Einheiten addieren. Woher wissen Sie sonst, welche Datensätze mit insgesamt bis zu 600 Datensätzen Sie führen?

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

Dies ist nur eine einfache Abfrage, um Ihnen den Einstieg zu erleichtern, und es gibt noch eine Reihe von Problemen zu lösen:

  • Es hört bei <=600 auf, sodass Sie in den meisten Fällen Ihr Größenlimit nicht genau ausfüllen. Dies bedeutet, dass Sie es möglicherweise optimieren möchten, um einen weiteren Datensatz zuzulassen. Wenn der erste Datensatz beispielsweise> 600 ist, gibt die Abfrage nichts zurück, und das könnte ein Problem sein.
  • Es bringt nichts, später nach zusätzlichen kleineren Datensätzen zu suchen, die noch unter die Obergrenze passen könnten.
  • Datensätze mit identischen date_created-Werten könnten hier und da doppelt gezählt werden.