Mysql
 sql >> Database >  >> RDS >> Mysql

Una query SQL da selezionare finché SUM(users_count) non raggiunge 1000

Questa soluzione eseguirà una somma cumulativa, interrompendosi quando la somma supera 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;

Ciò significa che se hai due valori di, diciamo, 800, la somma totale sarà 1600. Il primo SELECT serve solo per inizializzare il @total variabile.

Se vuoi evitare che la somma superi 1000, a parte i casi in cui una singola riga ha un valore maggiore di 1000, penso che funzioni, anche se dovrai sottoporla a test rigorosi:

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);