Oracle - Grupo de rango de fechas por campo determinado

 
Vista:
sin imagen de perfil

Grupo de rango de fechas por campo determinado

Publicado por Frank (2 intervenciones) el 09/04/2015 00:41:18
Hola, necesito un apoyo en un reporte, intentare ser detallado con mi problema.
Lo que pasa tengo una tabla de datos historicos por empleado (Tabla hist_empleado).
Un empleado cobra su sueldo en un banco por un rango de tiempo; cambia de banco por otro rango y luego vuelve al banco inicial hasta la actualidad.

TABLA: hist_empleado
COLUMNA: cod_emp, anio_periodo, mes_periodo, cod_banco

TABLA: tbancos
COLUMNA: cod_banco, nomb_banco

SELECT he.cod_emp,
MIN (he.anio_periodo|| mes_periodo) AS inicio,
MAX (he.anio_periodo || mes_periodo) AS fin,
he.cod_banco, tb.nomb_banco
FROM hist_empleado he, tbancos tb
WHERE (he.cod_banco = tb.cod_banco)
AND he.cod_emp = :codiemplper
GROUP BY he.cod_emp, he.cod_banco, tb.nomb_banco
ORDER BY 1, 2

este SELECT anterior, me trae solo 2 lineas cuando lo que necesito es que me traiga 3 lineas.
Lo que necesito visualizar es de la siguiente manera.

cod_emp inicio fin cod_banco nomb_banco
------------------------------------------------------------------------------------------------------
101 201401 201406 02 BCP
101 201407 201408 03 BBVA
101 201409 201503 02 BCP

Pero logicamente con el SELECT que detalle solo me trae 2 lineas.

Gracias de antemano
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

Grupo de rango de fechas por campo determinado

Publicado por fernanda (37 intervenciones) el 09/04/2015 20:15:58
Hola,

prueba agregando al group by le fecha de inicio y termino

cuenta como te fue
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

Grupo de rango de fechas por campo determinado

Publicado por Frank (2 intervenciones) el 10/04/2015 22:33:56
Hola Fernanda.
Si agrupo las fechas me sale todo el listado que tengo en mi tabla. Te refieres a esta manera no es asi.

SELECT he.cod_emp,
MIN (he.anio_periodo|| mes_periodo) AS inicio,
MAX (he.anio_periodo || mes_periodo) AS fin,
he.cod_banco, tb.nomb_banco
FROM hist_empleado he, tbancos tb
WHERE (he.cod_banco = tb.cod_banco)
AND he.cod_emp = :codiemplper
GROUP BY he.cod_emp, he.cod_banco, tb.nomb_banco, he.anio_periodo, he.mes_periodo
ORDER BY 1, 2

El resultado q me sale es asi.

cod_emp inicio fin cod_banco nomb_banco
------------------------------------------------------------
101 201401 201401 02 BCP
101 201402 201402 02 BCP
101 201403 201403 02 BCP
101 201404 201404 02 BCP
101 201405 201405 02 BCP
101 201406 201406 02 BCP
101 201407 201407 03 BBVA
101 201408 201408 03 BBVA
101 201409 201409 02 BCP
101 201410 201410 02 BCP
101 201411 201411 02 BCP

Y lo que deseo solo es agruparlo de la manera q solo me de resultado 3 lineas.
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

Grupo de rango de fechas por campo determinado

Publicado por Alixandro Florian (63 intervenciones) el 19/04/2015 08:30:48
Hola Frank, desde mi punto de vista y analizando tu inquietud, los dos registros que devuelve tu query son correcto, explico:

Primero: al menos que tu aplicación tenga como finalidad la administración de los recursos humanos de varias empresas (en este caso varios bancos), no tiene porque mostrar el registro histórico de otra empresa, y si así fuese el caso, debe ser bajo la autorización de unas de las parte, porque si no, estaría violando en acuerdo de con fidelidad de la información bajo tu administración y responsabilidad a ambas partes.

Segundo: como dice, que el empleado se mantuvo cobrando su sueldo en un periodo de fecha x, hasta el momento de su renuncia o es cancelado en el banco A, (aquí los dados pasan al histórico), el cual a partir de ese instante pasa a laborar a otro banco (banco B), para luego regresar de nuevo al banco A, (aquí se genera un histórico del banco B, que en nada tiene que ver con el banco A) y un nuevo registro en el banco A.

En conclusión: en el banco A tendrá dos registros, un registro histórico y un registro actual del nuevo ingreso. En el banco B solo tendrá un único registro histórico, que en ambos casos son ajeno uno del otro, a menos que no cumpla con los explicado en el párrafo primero.

Espero que con esta explicación haya aclarado tu duda.
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