Това решение ще изпълни кумулативна сума, спирайки, когато сумата надвиши 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;
Това означава, че ако имате две стойности от, да речем, 800, общата сума ще бъде 1600. Първият SELECT е само за инициализиране на @total
променлива.
Ако искате да предотвратите сумата да надхвърли 1000, освен в случаите, когато един ред има стойност по-голяма от 1000, тогава мисля, че това работи, въпреки че ще трябва да го подложите на някои стриктни тестове:
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);