Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wybierać aż do osiągnięcia sumy

Potrzebujesz sposobu na uporządkowanie, które rekordy mają pierwszeństwo przed innymi podczas dodawania do maksymalnej liczby jednostek. W przeciwnym razie, skąd wiesz, który zestaw rekordów, który łącznie liczy do 600, przechowujesz?

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

To tylko podstawowe zapytanie na początek, a do rozwiązania pozostało jeszcze wiele problemów:

  • Zatrzymuje się na <=600, więc w większości przypadków nie wypełnisz dokładnie swojego limitu rozmiaru. Oznacza to, że możesz chcieć go poprawić, aby zezwolić na jeszcze jeden rekord. Na przykład, jeśli pierwszy rekord ma wartość> 600, zapytanie nie zwróci nic, co może stanowić problem.
  • Nie zrobi nic, aby później sprawdzić dodatkowe mniejsze rekordy, które mogą nadal zmieścić się pod czapką.
  • Rekordy z identycznymi wartościami date_created mogą być tu i tam liczone podwójnie.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę przetestować mój przykład wstrzykiwania PHP MySQL?

  2. Nie można zwiększyć max_open_files dla Mysql max-połączeń w Ubuntu 15

  3. Wybierz największą wartość na każde ostatnie 7 dni

  4. Czy powinienem trzymać się tylko automatycznej kopii zapasowej AWS RDS lub migawek DB?

  5. Pisanie zapytania SQL do pozycji SELECT z poniższej tabeli