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

SQL Complejo

Estas en el tema de SQL Complejo en el foro de Oracle en Foros del Web. .......... o que no se hacerlo Ahí va la pregunta: Se puede hacer un select que me de el siguiente resultado: id_persona nombre_persona maximo_saldo_cuenta_1 maximo_saldo_cuenta_2 ...
  #1 (permalink)  
Antiguo 02/09/2012, 12:55
Avatar de juanmiguel  
Fecha de Ingreso: enero-2009
Mensajes: 18
Antigüedad: 14 años
Puntos: 0
SQL Complejo

.......... o que no se hacerlo

Ahí va la pregunta:

Se puede hacer un select que me de el siguiente resultado:

id_persona nombre_persona maximo_saldo_cuenta_1 maximo_saldo_cuenta_2 maximo_saldo_cuenta_3

Estando todas las cuentas en la misma tabla sería algún select así:

select ID, nombre, max(saldo), max-1(saldo), max-2(saldo) from nombres, cuentas where nombres.id = cuentas.id_persona group by id

Con lo que obtengo una lista con los nombre y los maximos saldos de sus tres cuentas con mayor saldo

Se que está falta hecho pero

¿se podría llegar a aplantear en un solo sql algo así o tengo que recurrir a un pl/sql?

Gracias de nuevo por adelantado
  #2 (permalink)  
Antiguo 02/09/2012, 19:29
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 14 años
Puntos: 360
Respuesta: SQL Complejo

Tiene cara de pl.

Con sql quedaría demasiado compleja, posiblemente no muy afinada. Con una función o procedimiento sería mucho mas rapido y directo.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 03/09/2012, 09:27
Avatar de juanmiguel  
Fecha de Ingreso: enero-2009
Mensajes: 18
Antigüedad: 14 años
Puntos: 0
Respuesta: SQL Complejo

Gracias Huesos, me lo temía

Un saludo.

Juanmi
  #4 (permalink)  
Antiguo 03/09/2012, 12:49
Avatar de juanmiguel  
Fecha de Ingreso: enero-2009
Mensajes: 18
Antigüedad: 14 años
Puntos: 0
Respuesta: SQL Complejo

Mensaje editado y movido a otro tema.

Disculpas.

Última edición por juanmiguel; 04/09/2012 a las 01:23 Razón: Abierto en otro tema
  #5 (permalink)  
Antiguo 05/09/2012, 17:09
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 15 años, 3 meses
Puntos: 85
Respuesta: SQL Complejo

Suponiendo que la tabla Cuentas tiene los campos IdPersona, IdCuenta y Saldo, y suponiendo que estás con Oracle 9i o superior, puedes obtener los 3 mayores saldos por persona con la función RANK(), por ejemplo:

Código:
select
 IdPersona, Saldo 
from
 (select IdPersona, 
             Saldo, 
             rank() over (partition by IdPersona order by Saldo) r 
   from Cuentas)
where r <=3
/
Y después solo quedaría hacer un pivot para visualizar los registros como columnas y un join con la tabla Personas para obtener el nombre.

Saludos

Etiquetas: complejo, select, sql, tabla, todas
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 01:39.