CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_RandCluster`()
BEGIN
declare var_uid text;
declare var_hh02 text;
declare var_hh03 text;
declare var_hh07 text;
declare var_hh08 text;
declare var_hhdt text;
declare var_id_org text;
declare var_hh02_new text;
declare var_count integer;
declare var_total double;
declare var_sample_interval double;
declare var_rStart double;
declare var_nextStop double;
declare var_rcount integer;
declare var_randno1 integer;
declare var_randno2 integer;
DECLARE done INT DEFAULT 0;
DECLARE done1 INT DEFAULT 0;
Block1: BEGIN
#declare cur cursor for SELECT cluster from nns2018.enumblock where closed='1' order by cluster;
declare cur cursor for
SELECT
`l`.`hh02` AS `cluster`
FROM
`nns2018`.`listings` `l`
STRAIGHT_JOIN
(
SELECT
MAX(LPAD(`nns2018`.`listings`.`_id`, 9, 0)) AS `_id`,
`nns2018`.`listings`.`hh02` AS `hh02`
FROM
`nns2018`.`listings`
WHERE
((`nns2018`.`listings`.`username` NOT IN ('dmu@aku'))
AND (NOT ((`nns2018`.`listings`.`username` LIKE '%user%')))
AND (`nns2018`.`listings`.`clustercode` < 6000))
GROUP BY `nns2018`.`listings`.`hh02`
) `s`
ON (((LPAD(`l`.`_id`, 9, 0) = `s`.`_id`)
AND (`l`.`hh02` = `s`.`hh02`)))
left join (Select hh02 from nns2018.bl_randomised group by hh02) r on l.hh02 = r.hh02
WHERE
(`l`.`hh04` = 8)
AND ((`l`.`username` NOT IN ('dmu@aku'))
AND NOT (`l`.`username` LIKE '%user%'))
AND (`l`.`hh02` < 6000)
and r.hh02 is null
ORDER BY `l`.`hh02`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
open cur;
REPEAT
fetch cur into var_hh02;
IF (((SELECT COUNT(*) FROM bl_randomised WHERE hh02=var_hh02) <= 0)
AND (SELECT count(*) FROM nns2018.linelisting_status group by cluster_code having cluster_code = var_hh02) =1 ) Then
Block2:BEGIN
DECLARE cur1 cursor for SELECT a.uid, a.hh02, lpad(a.hh03, 4, '0'), if(a.hh07 > 0, lpad(a.hh07, 3, '0'), a.hh07), a.hh08, a.hhdt, e.id_org FROM nns2018.listings a
left join nns2018.enumblock e on a.hh02 = e.cluster
WHERE (hh07 > 0) and a.hh02 = var_hh02 and (left(a.hh08,2) != 'dd' and left(a.hh08, 4) != 'dele')
ORDER BY lpad(a.hh03,4,0), lpad(hh07,3,0);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = 1;
open cur1;
select FOUND_ROWS() into var_total;
if (var_total > 20) Then
set var_sample_interval = var_total / 20;
set var_rStart = rand() * (var_sample_interval - 1) + 1;
set var_nextStop = var_rStart;
set var_count = 0;
set var_rCount = 0;
#select var_total, var_hh02, var_sample_interval, var_rStart;
REPEAT
fetch cur1 into var_uid, var_hh02, var_hh03, var_hh07, var_hh08, var_hhdt, var_id_org;
set var_count = var_count + 1;
if (var_count = floor(var_nextStop)) then
set var_nextStop = var_nextStop + var_sample_interval;
# Fixed blank Head of Household name
if var_hh08 = '' then set var_hh08 = '-none-'; End if;
set var_rCount = var_rCount + 1;
INSERT into nns2018.bl_randomised(uid, hh02, hh03, hh07, hh08, hhss, compid, total, randno, quot, sno, hhdt, id_org, con_id, user_id, server_id) values(var_uid, var_hh02, var_hh03, var_hh07, var_hh08, 1, var_count, var_total,var_rStart, var_sample_interval, var_rCount, var_hhdt, var_id_org, connection_id(), user(), @@server_id);
end if;
UNTIL done1 or var_rCount >= 20 END REPEAT;
end if;
if ( var_total > 0 and var_total <=20) then
set var_nextStop = var_rStart;
set var_count = 0;
set var_rCount = 0;
#select var_total, var_hh02, var_sample_interval, var_rStart;
REPEAT
fetch cur1 into var_uid, var_hh02, var_hh03, var_hh07, var_hh08, var_hhdt, var_id_org;
set var_count = var_count + 1;
#var_rStart, var_sample_interval,
# Fixed blank Head of Household name
if var_hh08 = '' then set var_hh08 = '-none-'; End if;
set var_rCount = var_rCount + 1;
INSERT into nns2018.bl_randomised(uid, hh02, hh03, hh07, hh08, hhss, compid, total, randno, quot, sno, hhdt, id_org, con_id, user_id, server_id) values(var_uid, var_hh02, var_hh03, var_hh07, var_hh08, 1, var_count, var_total,var_rStart, var_sample_interval, var_rCount, var_hhdt, var_id_org, connection_id(), user(), @@server_id);
UNTIL done1 or var_rCount >= var_total END REPEAT;
End if;
close cur1;
END Block2;
set done1 = null;
End IF;
UNTIL done END REPEAT;
close cur;
END Block1;
END
To embed this program on your website, copy the following code and paste it into your website's HTML: