我正在使用嵌套光标来检索许多不同人的工作的最后一个小时。为此,我首先在第一个光标中使用每个人的ID,然后将ID发送到第二个光标,该光标为每个人的ID选择一个最大(小时)。返回的值正确,但是显示的结果是重复的,除非我单独测试第一个光标,否则每个ID仅显示一个结果。也许答案很容易看到,但是我没有做过很多尝试解决它之后。感谢您的帮助。这是我的代码:
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
感谢您的帮助
对于相当简单的DB任务,代码似乎很复杂。基于您的代码的假设,有两个与" temp.logon = chauffeur.matricule_chauffeur"相结合的表(temp& chauffeur)。现在,您想获得Max(小时)(即Max(Temp.Heure))和人ID(即ID_CHAUFFEUR)的独特记录。我相信,可以通过以下相当复杂的查询来实现上述任务。
SELECT DISTINCT(max(temp.heure)) as heure, temp.id_chauffeur
FROM temp INNER JOIN chauffeur ON temp.logon = chauffeur.matricule_chauffeur
ORDER BY temp.heure;
(注意:我只是用干式运行编译了查询,因为我没有桌子结构。希望它对您有用...欢呼!)