Consulta en Oracle

Tengo que realizar la siguiente consulta en oracle, de una base de datos que contiene empleados y las llamadas recibidas y realizadas por estos, pues bien, la consulta pide: Listado de los empleados que han realizado llamadas a móviles en el mes anterior al actual. Por tanto, hay que saber en qué mes estamos, cosa que con sysdate se tiene solucionado, pero hay que restarle uno a ese mes, por lo que yo entiendo, para saber que llamadas se hicieron el mes pasado. Estoy probando con funciones como months_between, sacar el mes con una máscara y restarlo, pero nada. Tengo poco plazo para entregar esta consulta.

1 respuesta

Respuesta
1
Para obtener el mes anterior al actual se puede hacer dándole formato a sysdate para extraer el mes y restarle uno
to_char(sysdate,'MM') Devuelve el mes actual. Para restarle uno, aunque no es necesario, es más correcto convertirlo a número:
To_number(to_char(sysdate,'MM')) - 1 devolverá el mes actual al anterior. Pero cuidado porque si el mes actual es enero esto devolverá mes cero y eso no te valdrá. Ademas, si el mes actual es enero, el anterior es 12, pero 12 del año anterior. No sé si me explico.
Yo haría:
if to_number(to_char(sysdate,'MM')) = 1 then
v_mes_anterior := 12;
v_ano_anterior := to_number(to_char(sysdate,'YY')) - 1
else
v_mes_anterior := to_number(to_char(sysdate,'MM')) - 1;
v_ano_anterior := to_number(to_char(sysdate,'YY'));
end if;
Ya tengo en v_mes_anterior y v_año_anterior el mes y año anterior al actual. Ya solo queda comparar con la fecha de llamada de tu base de datos.
select * from tabla
where to_number(to_char(fecha_llamada,'MM')) = v_mes_anterior
and to_number(to_char(fecha_llamada,'YY')) = v_ano_anterior
Y ya lo tienes.
Puede que no sea la solución más limpia, pero funciona (lo he probado). Siento no haber tenido tiempo para investigar alguna otra solución.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas