bazyliszek83, zdaje się, że byliśmy na podobnej rozmowie

Jeżeli dobrze pamiętam to w moim przypadku miałem pobrać trzech najlepiej zarabiających pracowników bez klauzuli LIMIT i ORDER BY na tabeli o następującej strukturze:
DECLARE salary_tmp, salary1, salary2, salary3 DECIMAL(6,2) DEFAULT 0;
DECLARE cur CURSOR FOR SELECT firstname, lastname, salary FROM staff; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO firstname_tmp, lastname_tmp, salary_tmp;
IF NOT done THEN
IF salary_tmp > salary1 THEN
SET salary3 = salary2;
SET firstname3 = firstname2;
SET lastname3 = lastname2;
SET salary2 = salary1;
SET firstname2 = firstname1;
SET lastname2 = lastname1;
SET salary1 = salary_tmp;
SET firstname1 = firstname_tmp;
SET lastname1 = lastname_tmp;
ELSEIF salary_tmp > salary2 THEN
SET salary3 = salary2;
SET firstname3 = firstname2;
SET lastname3 = lastname2;
SET salary2 = salary_tmp;
SET firstname2 = firstname_tmp;
SET lastname2 = lastname_tmp;
ELSEIF salary_tmp > salary3 THEN
SET salary3 = salary_tmp;
SET firstname3 = firstname_tmp;
SET lastname3 = lastname_tmp;
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
SELECT firstname1, lastname1, salary1, firstname2, lastname2, salary2, firstname3, lastname3, salary3;
END //
DELIMITER ;
[/list]