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

Seleccionar Cambio Entre Campos

Estas en el tema de Seleccionar Cambio Entre Campos en el foro de Oracle en Foros del Web. Hola que tal, tengo que realizar una consulta y pues la verdad no tengo idea de como realizarla, tengo los siguiente campo1 campo2 12/10/2007 VALOR ...
  #1 (permalink)  
Antiguo 16/11/2007, 14:00
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 5 meses
Puntos: 0
Seleccionar Cambio Entre Campos

Hola que tal, tengo que realizar una consulta y pues la verdad no tengo idea de como realizarla, tengo los siguiente

campo1 campo2
12/10/2007 VALOR
13/10/2007 VALOR
14/10/2007 VALOR
15/10/2007 HECAMBIADODEVALOR
16/10/2007 VALOR

como puedo hacer para que en la consulta solo me aparezca
campo1 campo2
12/10/2007 VALOR
15/10/2007 HECAMBIANDODEVALOR
16/10/2007 VALOR

espero haberme explicado
Saludos Cordiales!
  #2 (permalink)  
Antiguo 16/11/2007, 15:12
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: Seleccionar Cambio Entre Campos

Hola nuevo wako13...

Te propongo una solucion usando "ventanas logicas"...

Código:
DROP TABLE WAKO PURGE;

CREATE TABLE WAKO
(
FECHA DATE,
CAMPO VARCHAR2(5)
) TABLESPACE AUXILIAR PCTFREE 5 PCTUSED 95;

INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -10, 'VAL_1');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -9, 'VAL_1');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -8, 'VAL_2');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -7, 'VAL_1');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -6, 'VAL_1');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -5, 'VAL_2');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -4, 'VAL_1');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -3, 'VAL_1');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -2, 'VAL_2');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE) -1, 'VAL_1');
INSERT INTO WAKO VALUES (TRUNC(SYSDATE), 'VAL_1');

COMMIT;


SELECT FECHA,
       CAMPO
  FROM (
SELECT FECHA,
       CAMPO,
       LAG(FECHA,1) OVER(ORDER BY FECHA DESC) FECHA_MANIANA,
       LAG(CAMPO,1) OVER(ORDER BY FECHA DESC) CAMPO_MANIANA FROM WAKO
       )
 WHERE CAMPO <> CAMPO_MANIANA
 ORDER BY FECHA;
Como ves solo muestra las diferencias, toda la magia aparece cuando usas las funciones LAG y LEAD que son muy potentes debido a que como en este ejemplo, puedes traer el valor de un registro en formato diferido por asi decirlo.

Cualquier duda, me dices...

Suerte y nos vemos.

Sldo Mario.
  #3 (permalink)  
Antiguo 16/11/2007, 16:12
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: Seleccionar Cambio Entre Campos

Hola,

Buen post Mario, agrego un poco de info por las dudas, esta en ingles.

http://www.oracle-base.com/articles/misc/LagLeadAnalyticFunctions.php

Saludos
  #4 (permalink)  
Antiguo 20/11/2007, 14:11
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Seleccionar Cambio Entre Campos

Asi es Mario, me muestra los cambios de datos, solo que en lo que planteo debería devolver 7 filas, y en tu consulta solo me devuelve 6, y las fechas no corresponden con las de los valores.
Me explico, debería de quedar de esta forma:


TRUNC(SYSDATE) -10 'VAL_1'
TRUNC(SYSDATE) -8 'VAL_2'
TRUNC(SYSDATE) -7 'VAL_1'
TRUNC(SYSDATE) -5 'VAL_2'
TRUNC(SYSDATE) -4 'VAL_1'
TRUNC(SYSDATE) -2 'VAL_2'
TRUNC(SYSDATE) -1 'VAL_1'

He estado jugando con las funciones LAG y LEAD y aun no consigo hacer que quede de esa forma...

Muchas Gracias Mario

Saludos Cordiales
  #5 (permalink)  
Antiguo 21/11/2007, 09:43
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: Seleccionar Cambio Entre Campos

Ok nuevo Wako...

Cambios en el select...

Código PHP:
SELECT FECHA,
       
CAMPO
  FROM 

SELECT FECHA,
       
CAMPO,
       
ORDEN
  FROM 
(
SELECT FECHA,
       
CAMPO,
       
ROW_NUMBER() OVER(ORDER BY FECHA ASCORDEN,
       
LAG(FECHA,1OVER(ORDER BY FECHA DESCFECHA_MANIANA,
       
LAG(CAMPO,1OVER(ORDER BY FECHA DESCCAMPO_MANIANA FROM WAKO
       
)
 
WHERE CAMPO <> CAMPO_MANIANA
 UNION ALL
SELECT FECHA
,
       
CAMPO,
       
ORDEN
  FROM 
(
SELECT FECHA,
       
CAMPO,
       
ROW_NUMBER() OVER(ORDER BY FECHA ASCORDEN,
       
LAG(FECHA,1OVER(ORDER BY FECHA DESCFECHA_MANIANA,
       
LAG(CAMPO,1OVER(ORDER BY FECHA DESCCAMPO_MANIANA FROM WAKO
       
)
 
WHERE ORDEN 1
       
)
 
ORDER BY FECHA
Para esto supongo varias cosas, por ejemplo que no tiene mas de un registro con la misma fecha, por tanto haciendo uso de la funcion ROW_NUMBER que me ordena por fecha en este caso, traigo con un union all el primer registro que es seguramente lo que estas necesitando.

Cualquier cosa, aqui me encuentras.

Sldo Atte, Mario.

Última edición por MarioHeredia; 21/11/2007 a las 09:44 Razón: Me equivoque al escribir mi nombre
  #6 (permalink)  
Antiguo 22/11/2007, 11:07
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Seleccionar Cambio Entre Campos

Aqui una forma simple como lo he resuelto:

Select CAMPO, MIN(FECHA) FROM WAKO
GROUP BY CAMPO

Saludos Cordiales
  #7 (permalink)  
Antiguo 22/11/2007, 11:30
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: Seleccionar Cambio Entre Campos

Bueno Wako...

Y el Row_number te deberia traer la primer fecha del primer cambio, no te funciono?

De todas maneras, lograste llegar a lo que necesitabas.??

Sldo Atte, Mario.
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 02:40.