Solusi ini akan melakukan penjumlahan kumulatif, berhenti ketika jumlahnya melebihi 1000:
SELECT NULL AS users_count, NULL AS total
FROM dual
WHERE (@total := 0)
UNION
SELECT users_count, @total := @total + users_count AS total
FROM messages_queue
WHERE @total < 1000;
Itu berarti bahwa jika Anda memiliki dua nilai, katakanlah, 800, jumlah totalnya adalah 1600. SELECT pertama hanya menginisialisasi @total
variabel.
Jika Anda ingin mencegah jumlahnya melebihi 1000, selain dalam kasus di mana satu baris memiliki nilai lebih besar dari 1000, maka menurut saya ini berhasil, meskipun Anda harus menjalani beberapa pengujian yang ketat:
SELECT NULL AS users_count, NULL AS total, NULL AS found
FROM dual
WHERE (@total := 0 OR @found := 0)
UNION
SELECT users_count, @total AS total, @found := 1 AS found
FROM messages_queue
WHERE (@total := @total + users_count)
AND @total < 1000
UNION
SELECT users_count, users_count AS total, 0 AS found
FROM messages_queue
WHERE IF(@found = 0, @found := 1, 0);