DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`client_RandomList`(vNumber INT) BEGIN DECLARE i INT DEFAULT 0; DECLARE c INT DEFAULT 0; DECLARE maxClientFk INT; DROP TEMPORARY TABLE IF EXISTS tmp.client; CREATE TEMPORARY TABLE tmp.`client` (id INT AUTO_INCREMENT, clientFk INT, isSelected TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY(id), UNIQUE KEY clientFk (clientFk)) ENGINE = MEMORY; INSERT INTO tmp.client(clientFk) SELECT DISTINCT clientFk FROM vn.invoiceOut WHERE issued > TIMESTAMPADD(MONTH, -2, util.VN_CURDATE()); SELECT max(id) INTO maxClientFk FROM tmp.client; WHILE i < vNumber DO SET i = i + 1; WHILE c = 0 DO SELECT id INTO c FROM tmp.client WHERE id = floor(RAND() * maxClientFk) + 1 AND isSelected = FALSE LIMIT 1; END WHILE; -- SELECT i, maxClientFk, c; UPDATE tmp.client SET isSelected = TRUE WHERE id = c; SET c = 0; END WHILE; SELECT c.id, c.name FROM tmp.client tc JOIN vn.client c ON c.id = tc.clientFk WHERE isSelected ORDER BY clientFk; END$$ DELIMITER ;