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

Ayuda mejorar consulta oracle

Estas en el tema de Ayuda mejorar consulta oracle en el foro de Oracle en Foros del Web. Como estan Tengo una tabla donde estan lso detalles de uns flujos de un usuario la tabla es algo parecido a esto Flujo -- Usuario ...
  #1 (permalink)  
Antiguo 29/06/2010, 11:10
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.051
Antigüedad: 12 años, 5 meses
Puntos: 50
Ayuda mejorar consulta oracle

Como estan

Tengo una tabla donde estan lso detalles de uns flujos de un usuario

la tabla es algo parecido a esto


Flujo -- Usuario -- Valor -- Fecha
001 -- 1 -- 10000 -- 03/02/2010
001 -- 1 -- 12000 -- 03/02/2010
002 -- 1 -- 50000 -- 03/04/2010
002 -- 1 -- 10000 -- 03/04/2010
002 -- 2 -- 10000 -- 03/04/2010


Necesito realizar la sumatoria del valor del flujo donde la fecha sea mayor para determinado usuario.

Es decir, primero necesitaria saber entre los flujos del usuario cual es e lque tiene fecha mayor y luego realizar la sumatoria de los valores de este flujo. En el ejemplo para el usuario 1 seria en flujo 002 y el resultado seria 60.000


Pense haciendolo asi pero no me funciono me saca error

select sum(valor) from flujos where usuario=1 and codflujo = (select codflujo from flujos where usuario=1 and rowid=1 order by fecha desc)


"rowid hace referencia al campo que crea oracle con el consecutivo del registro seleccionado no recuerdo si se llama asi exactamente "no tengo oracle en este pc para verificar" pero lo pongo para que me entiendan que estoy haciendo, lo utilizo para que solo me traiga un registro"

hay alguna otra manera de hacerlo o como arreglo la que tengo hecha?

Gracias

Última edición por helacer; 29/06/2010 a las 11:55
  #2 (permalink)  
Antiguo 30/06/2010, 07:44
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 10 años, 6 meses
Puntos: 6
Respuesta: Ayuda mejorar consulta oracle

Hola,

Deben existir formas mas sencillas, pero este te da el resultado para todos los usuarios

Código:
SELECT flujo,usuario,SUM(valor) 
FROM flujos 
WHERE (flujo,usuario) IN 
                     (SELECT flujo,usuario 
                     FROM flujos 
                     WHERE fecha IN 
                               (SELECT  MAX(fecha) 
                               FROM flujos 
                               GROUP BY usuario) 
                     GROUP BY flujo,usuario ) 
GROUP BY flujo,usuario
Muchos group by, pero debe haber algo mas simple, solo que lo hice al instante. Funciona

Saludos y suerte.
  #3 (permalink)  
Antiguo 30/06/2010, 08:29
Avatar de 8vio  
Fecha de Ingreso: marzo-2008
Ubicación: Detras del monitor
Mensajes: 168
Antigüedad: 10 años, 6 meses
Puntos: 6
Respuesta: Ayuda mejorar consulta oracle

Aclaratoria,

Cita:
Iniciado por helacer Ver Mensaje
Como estan


select sum(valor) from flujos where usuario=1 and codflujo = (select codflujo from flujos where usuario=1 and rowid=1 order by fecha desc)


"rowid hace referencia al campo que crea oracle con el consecutivo del registro seleccionado no recuerdo si se llama asi exactamente "no tengo oracle en este pc para verificar" pero lo pongo para que me entiendan que estoy haciendo, lo utilizo para que solo me traiga un registro"

hay alguna otra manera de hacerlo o como arreglo la que tengo hecha?

Gracias

Yo creo que en este caso deberias usar el rownum, podrias ordenarlo por rowid pero no decir que el rowid sea igual a 1 o menor a X, el rowid es un identificador, en cambio el rownum si es la pseudocolumna que se genera para numerar tus datos por asi decirlo

Igualmente te va a fallar de esa manera, debido a que no puedes realizar ordenamientos en un subquery

Saludos

Etiquetas: mejoras
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 19:10.