Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Poner una función de grupo en la condición

Estas en el tema de Poner una función de grupo en la condición en el foro de Oracle en Foros del Web. Lo que quiero realizar es obtener todos los registros, que cumplan que una columna tenga el máximo valor respecto a las demás (por ejemplo, una ...
  #1 (permalink)  
Antiguo 04/03/2008, 03:37
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Poner una función de grupo en la condición

Lo que quiero realizar es obtener todos los registros, que cumplan que una columna tenga el máximo valor respecto a las demás (por ejemplo, una fecha: imaginad que queréis obtener los registros de un log, del último día que fue actualizado. U obtener todos los trabajadores que cobran el sueldo máximo).

Algo así:

select campo1,campo2,campo3 from tabla_log where campo1=max(campo1)

En esencia, sería introducir una función de grupo en la condición, lo cual, tal cual lo he puesto, no está permitido.

¿Hay algún modo de realizarlo, o forzosamente hay que utilizar dos consultas a la base de datos?

Gracias
  #2 (permalink)  
Antiguo 04/03/2008, 09:08
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Poner una función de grupo en la condición

Hola,

Cita:
..U obtener todos los trabajadores que cobran el sueldo máximo..
Código:
select empleado, sueldo 
from empleados
where sueldo = (select max(sueldo) from empleados)
Saludos
  #3 (permalink)  
Antiguo 04/03/2008, 09:59
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: Poner una función de grupo en la condición

Hola ProgramadorNet, como te ha ido con el reporte que posteaste la semana pasada?

Con respecto a lo que necesitas, te recomiendo lo siguiente.

Código:
-- POR FECHA
SELECT FECHA,
       EMPLEADO,
       SUELDO
       MAX(SUELDO) OVER(PARTITION BY FECHA, EMPLEADO) MAX_SUELDO
  FROM SUELDOS
 WHERE FECHA BETWEEN TO_DATE('&FECHA_DESDE','DD.MM.YYYY') AND TO_DATE('&FECHA_HASTA','DD.MM.YYYY');
 
-- POR DEPARTAMENTO
SELECT DEPARTAMENTO,
       EMPLEADO,
       SUELDO
       MAX(SUELDO) OVER(PARTITION BY DEPARAMENTO, EMPLEADO) MAX_SUELDO
  FROM SUELDOS;
  
-- SIN FECHA NI DEPARTAMENTO
SELECT EMPLEADO,
       SUELDO
       MAX(SUELDO) OVER(PARTITION BY EMPLEADO) MAX_SUELDO
  FROM SUELDOS;
Asi podras tener tu maximo sueldo por fecha, por departamento o por lo que quieras como una columna extra.

Solo se encuentran disponibles estas funciones de windowing desde los ultimos release de 8i en adelante.

Saludos, Mario.
__________________
Y venció David al filisteo con honda y piedra; e hirió al filisteo y lo mató, sin tener David espada en su mano.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:19.