Я использую вложенные курсоры для извлечения последнего часа работы для разных людей.
Для этого я сначала беру идентификаторы каждого человека в первом курсоре и отправляю идентификаторы второму курсору, который выбирает максимум (час) для идентификатора каждого человека. Возвращенные значения верны, но отображаемые результаты дублируются, если только когда я проверяю только первый курсор, он отображает только один результат для каждого идентификатора.
Может быть, ответ легко увидеть, но я не после многих попыток решить его. Спасибо за вашу помощь.
Вот мой код:
block1:
BEGIN
DECLARE no_more_rows INT DEFAULT FALSE;
DECLARE v_idChauffeur VARCHAR(7);
DECLARE c_idChauffeur CURSOR FOR
SELECT DISTINCT id_chauffeur FROM temp
RIGHT JOIN chauffeur
ON temp.logon = chauffeur.matricule_chauffeur
WHERE logon IN (SELECT matricule_chauffeur from chauffeur)
order by id_chauffeur;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
OPEN c_idChauffeur;
get_idChauffeur:LOOP
FETCH c_idChauffeur INTO v_idChauffeur;
IF no_more_rows THEN CLOSE c_idChauffeur;
LEAVE get_idChauffeur;
END IF;
block2:
BEGIN
DECLARE no_more_rows2 INT DEFAULT FALSE;
DECLARE v_maxHeure VARCHAR(20);
DECLARE c_maxHeure CURSOR FOR
SELECT DISTINCT(max(heure)) as heure from temp
right join chauffeur ON temp.logon = chauffeur.matricule_chauffeur
where id_chauffeur = v_idChauffeur
order by heure;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;
OPEN c_maxHeure;
get_maxHeure:LOOP
FETCH c_maxHeure INTO v_maxHeure;
SELECT v_maxHeure,v_idChauffeur;
IF no_more_rows2 THEN CLOSE c_maxHeure;
LEAVE get_maxHeure;
END IF;
END LOOP get_maxHeure;
END BLOCK2;
END LOOP get_idChauffeur;
END BLOCK1
А вот некоторые из дублированных результатов:
v_maxHeure 23:02:17 v_idChauffeur 93
v_maxHeure 23:02:17 v_idChauffeur 93
v_maxHeure 23:24:12 v_idChauffeur 99
v_maxHeure 23:24:12 v_idChauffeur 99
v_maxHeure 15:19:28 v_idChauffeur 100
v_maxHeure 15:19:28 v_idChauffeur 100
Спасибо за вашу помощь