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

[SOLUCIONADO] Obtener los primeros Registros Agrupado

Estas en el tema de Obtener los primeros Registros Agrupado en el foro de Oracle en Foros del Web. Hola a todos, Mi consulta es la siguiente. Quiero obtener los primeros 2 movimientos pero de cada código. Cod1 Mov1 Cod1 Mov2 Cod1 Mov3 ... ...
  #1 (permalink)  
Antiguo 28/12/2015, 10:42
 
Fecha de Ingreso: marzo-2008
Ubicación: Peru
Mensajes: 83
Antigüedad: 16 años
Puntos: 0
Obtener los primeros Registros Agrupado

Hola a todos,

Mi consulta es la siguiente. Quiero obtener los primeros 2 movimientos pero de cada código.

Cod1 Mov1
Cod1 Mov2
Cod1 Mov3
...
Cod2 Mov1
Cod2 Mov2
Cod2 Mov3
...
Cod3 Mov1
Cod3 Mov2
Cod3 Mov3

El problema es que tengo todo en una sola tabla y sólo puedo usar una consulta select, ya que después lo procesaré por datastage.

Gracias por adelantado.

Saludos,
  #2 (permalink)  
Antiguo 28/12/2015, 10:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener los primeros Registros Agrupado

¿Qué DBMS usas?
La sintaxis puede variar de uno a otro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/12/2015, 11:21
 
Fecha de Ingreso: marzo-2008
Ubicación: Peru
Mensajes: 83
Antigüedad: 16 años
Puntos: 0
Respuesta: Obtener los primeros Registros Agrupado

Estoy utilizando Oracle PL/SQL
  #4 (permalink)  
Antiguo 28/12/2015, 13:29
 
Fecha de Ingreso: marzo-2008
Ubicación: Peru
Mensajes: 83
Antigüedad: 16 años
Puntos: 0
Respuesta: Obtener los primeros Registros Agrupado

Hola a todos,

Pude darle una solución. La dejo aquí por si alguien más llegara a necesitar obtener información parecida. Lo que hice fue jugar con rownumber y max. Busco el máximo movimiento por cada código y su rownum, luego filtro a todo lo que sea el mismo código y menos e igual al rownum+1. Se puede adaptar para los N últimos movimientos de cada código.
Código SQL:
Ver original
  1. SELECT CODIGO, MOVIMIENTO
  2.   FROM (SELECT CODIGO, MOVIMIENTO, ROWNUM ROWNUMA
  3.           FROM (SELECT DISTINCT CODIGO, MOVIMIENTO
  4.                   FROM TABLA
  5.                  GROUP BY CODIGO, MOVIMIENTO
  6.                  ORDER BY CODIGO ASC, MOVIMIENTO DESC)) X
  7.  WHERE EXISTS (SELECT 1
  8.                  FROM (SELECT B.CODIGO, A.MOVIMIENTO, ROWNUME + 1 ROWNUME
  9.                          FROM (SELECT CODIGO, MOVIMIENTO, ROWNUM ROWNUME
  10.                                  FROM (SELECT DISTINCT CODIGO, MOVIMIENTO
  11.                                          FROM TABLA
  12.                                         GROUP BY CODIGO, MOVIMIENTO
  13.                                         ORDER BY CODIGO ASC, MOVIMIENTO DESC)) A
  14.                         INNER JOIN (SELECT CODIGO, MAX(MOVIMIENTO) MOVIMIENTO
  15.                                       FROM TABLA
  16.                                      GROUP BY CODIGO) B
  17.                            ON A.CODIGO = B.CODIGO
  18.                           AND A.MOVIMIENTO = B.MOVIMIENTO) Y
  19.                 WHERE X.CODIGO = Y.CODIGO
  20.                   AND X.ROWNUMA <= Y.ROWNUME);

Última edición por gnzsoloyo; 28/12/2015 a las 14:13

Etiquetas: bases-de-datos-general, primeros, registros, select, tabla, usar
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 23:22.