36 lines
1000 B
SQL
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 ;
|