Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/02/2008, 10:22
MarioHeredia
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años
Puntos: 3
Re: crear columna en base a otra en consulta

Victor, es muy simple lo que necesitas, se puede hacer usando el feature de oracle para partitions de scripts.

Primero creamos una tabla:
Código:
DROP TABLE TABLE_VICTOR PURGE;

CREATE TABLE TABLE_VICTOR TABLESPACE AUXILIAR PCTFREE 5 PCTUSED 95 AS 
SELECT CARGA, FECHA FROM ( 
SELECT 4558 CARGA, TO_DATE('01.02.2008','DD.MM.YYYY') FECHA FROM DUAL UNION ALL
SELECT 4558 CARGA, TO_DATE('01.02.2008','DD.MM.YYYY') FECHA FROM DUAL UNION ALL
SELECT 4559 CARGA, TO_DATE('02.02.2008','DD.MM.YYYY') FECHA FROM DUAL UNION ALL
SELECT 4560 CARGA, TO_DATE('02.02.2008','DD.MM.YYYY') FECHA FROM DUAL UNION ALL
SELECT 4561 CARGA, TO_DATE('03.02.2008','DD.MM.YYYY') FECHA FROM DUAL UNION ALL
SELECT 4561 CARGA, TO_DATE('03.02.2008','DD.MM.YYYY') FECHA FROM DUAL UNION ALL
SELECT 4562 CARGA, TO_DATE('04.02.2008','DD.MM.YYYY') FECHA FROM DUAL
);
Una vez creada la tabla, corremos el siguiente select:
Código:
SELECT CARGA,
       FECHA,
       CARGA - CARGA_ANTERIOR ERROR
  FROM (SELECT CARGA,
               FECHA,
               LAG(CARGA,1) OVER(ORDER BY CARGA) CARGA_ANTERIOR
          FROM TABLE_VICTOR
       );
La funcion de windowing LAG es la que mas se ajusta a tus necesidades, en una columna adicional ejecuta el calculo de desplazamiento del campo carga, permitiendo hacer la resta y saber la diferencia a la que tu llamas error.

Bueno, muchos exitos.
Sldo Atte, Mario.