PostgreSQL - Función para encontrar la mayor diferencia entre fechas

 
Vista:
sin imagen de perfil
Val: 39
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Función para encontrar la mayor diferencia entre fechas

Publicado por José Vicente (28 intervenciones) el 26/09/2019 13:09:52
Hola, buenos días, estoy intentando hacer una función que recorra una tabla en Postgresql y devuelva la mayor diferencia entre dos fechas en registros consecutivos.
La tengo en Firebird, pero en Postgresql no me aclaro con las funciones de fechas.
Mi función en Firebird es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR ALTER PROCEDURE DIAS_SIN RETURNS (
	"RESULT" INTEGER
)
AS
DECLARE VARIABLE AUX INTEGER;
BEGIN
  AUX    = 0;
  RESULT = 0;
  FOR
    SELECT max(DATEDIFF(DAY FROM DT2.FECHA TO DT1.FECHA))
  FROM DATOS DT1, DATOS DT2
  WHERE DT1.SALIDA_NUM = DT2.SALIDA_NUM + 1
    INTO :AUX
  DO
    IF(AUX > RESULT) THEN RESULT = AUX;
  SUSPEND;
END
¿Puede alguien echarme una mano? Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Función para encontrar la mayor diferencia entre fechas

Publicado por martin flores (121 intervenciones) el 27/09/2019 19:28:43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE OR REPLACE FUNCTION public.dias_sin()RETURNS BIGINT LANGUAGE 'plpgsql'
AS
$$
DECLARE
 MAX_DIF BIGINT;
BEGIN
 
      SELECT max(DT2.FECHA - DT1.FECHA) INTO  MAX_DIF
      FROM DATOS DT1, DATOS DT2  WHERE DT1.SALIDA_NUM = DT2.SALIDA_NUM + 1;
 
     RETURN COALESCE(MAX_DIF,0);
 
END;
$$

O algo así.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 39
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Función para encontrar la mayor diferencia entre fechas

Publicado por José Vicente (28 intervenciones) el 27/09/2019 21:10:03
Hola, en primer lugar gracias por tu ayuda pero el resultado no es correcto, devuelve 36 cuando realmente son 119, o sea, que hay algo que se escapa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Función para encontrar la mayor diferencia entre fechas

Publicado por martin flores (121 intervenciones) el 02/10/2019 16:32:14
En postgres al diff en días basta con el operador - , no se que tipo de fecha estas usando, pero de ultima hacele un cast a date,
algo así

SELECT max(DT2.FECHA::DATE - DT1.FECHA::DATE) INTO MAX_DIF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 39
Ha aumentado 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Función para encontrar la mayor diferencia entre fechas

Publicado por José Vicente (28 intervenciones) el 02/10/2019 21:06:31
Hola, gracias, pero no devuelve el valor real, debería devolver 119 y devuelve 36, parece que el bucle se para en la primera diferencia que encuentra y no sigue más.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE FUNCTION public.dias_sin()RETURNS BIGINT LANGUAGE 'plpgsql'
 
AS
 
$$
 
DECLARE
 
 MAX_DIF BIGINT;
 
BEGIN
 
      SELECT max(DT2.FECHA::DATE - DT1.FECHA::DATE) INTO  MAX_DIF
 
      FROM DATOS DT1, DATOS DT2  WHERE DT1.SALIDA_NUM = DT2.SALIDA_NUM + 1;
 
     RETURN COALESCE(MAX_DIF,0);
 
END;
 
$$
¿Qué puedo hacer?. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar