salix/db/routines/vn/functions/getTimeBetweenRoadmapAddres...

36 lines
1000 B
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`getTimeBetweenRoadmapAddresses`(
vRoadmapAddressFrom INT,
vRoadmapAddressTo INT
)
RETURNS int(11)
DETERMINISTIC
BEGIN
/**
* Retorna el tiempo en segundos que se suele tardar en ir
* de un punto de distribución a otro en una ruta troncal.
*
* @param vRoadmapAddressFrom Punto de distribución de origen
* @param vRoadmapAddressTo Punto de distribución de destino
* @return Tiempo en segundos
*/
DECLARE vSeconds INT;
WITH wRoadmap AS (
SELECT ROW_NUMBER() OVER(PARTITION BY roadmapFk ORDER BY eta) `sequence`,
roadmapFk,
roadmapAddressFk,
eta
FROM vn.roadmapStop
)
SELECT AVG(TIME_TO_SEC(TIMEDIFF(rTo.eta, rFrom.eta))) INTO vSeconds
FROM wRoadmap rFrom
JOIN wRoadmap rTo ON rTo.roadmapFk = rFrom.roadmapFk
WHERE rFrom.roadmapAddressFk = vRoadmapAddressFrom
AND rTo.roadmapAddressFk = vRoadmapAddressTo
AND rFrom.`sequence` + 1 = rTo.`sequence`;
RETURN vSeconds;
END$$
DELIMITER ;