Oracle - OBTENER REGISTROS CON LAS DOS MAS RECIENTES FECHAS

   
Vista:

OBTENER REGISTROS CON LAS DOS MAS RECIENTES FECHAS

Publicado por Vic (1 intervención) el 18/04/2015 06:51:44
Que tal tengo una tabla similar a la siguiente:

CLAVE | MONTO1 | MONTO2 | FECHA_CARGA |
2013-XX-ZZ | 500 | 200 | 2015/04/04 |
2013-XX-ZZ | 300 | 200 | 2015/04/04 |
2013-XX-ZZ | 600 | 100 | 2015/03/01 |
2013-XX-ZZ | 200 | 150 | 2015/02/03 |
2013-XX-ZZ | 400 | 150 | 2015/04/03 |
2014-RR-YY | 900 | 200 | 2015/04/04 |
2014-RR-YY | 500 | 100 | 2015/03/02 |
2014-RR-YY | 100 | 50 | 2015/03/02 |
2014-RR-YY | 100 | 300 | 2015/01/02 |


Necesito realizar un query en oracle con el cual pueda obtener la suma de cada campo (MONTO1, MONTO2) de los registros con la fecha más reciente y posteriormente obtener la suma de cada campo (MONTO1, MONTO2) en registros con la penultima fecha o anterior a la más reciente, para finalmente restar al registro obtenido con la fecha más reciente el valor del registro obtenido con la fecha_carga anterior.

Es decir el resultado que debería obtener es el siguiente:

TOTAL DE REGISTROS CON FECHA_CARGA MAS RECIENTE:
CLAVE | MONTO1 | MONTO2 | FECHA_CARGA |
2013-XX-ZZ | 800 | 400 | 2015/04/04 |

TOTAL REGISTROS DE FECHA_CARGA ANTERIOR
CLAVE | MONTO1 | MONTO2 | FECHA_CARGA |
2013-XX-ZZ | 350 | 150 | 2015/04/03 |

EL RESULTADO QUE NECESITO OBTENER
CLAVE | MONTO1 | MONTO2 |
2013-XX-ZZ | 450 | 250 |

Tengo la siguiente consulta que me trae la fecha_carga más reciente, pero no he ideado como continuar, tengo muy poca experiencia en consultas de SQL.


SELECT CLAVE, SUM(MONTO1), SUM(MONTO2), MAX(FECHA_CARGA) FROM TABLA1

Les agradezco de antemano sus sugerencias y comentarios.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

OBTENER REGISTROS CON LAS DOS MAS RECIENTES FECHAS

Publicado por Rafael Mendoza rafael@reef-life.com.mx (178 intervenciones) el 23/04/2015 09:02:45
Para obtener la sumatoria de las ultimas dos fechas lo mas sencillo es:

1
2
3
4
5
6
7
8
SELECT FECHA_CARGA
     , SUM(MONTO1) MONTO1
     , SUM(MONTO2) MONTO2
     , ROWNUM AS POS
FROM TABLA1
WHERE ROWNUM < 3
GROUP BY FECHA_CARGA
ORDER BY FECHA_CARGA DESC;

Vaya hasta donde entendi la clave no juega nada en la ecuacion.

Con eso tendrias los valores de las dos ultimas fechas, para restarlas ...

1
2
3
4
5
6
7
8
9
10
11
12
SELECT SUM( CASE WHEN POS = 1 THEN MONTO1 ELSE MONTO1*-1 END) MONTO1
     , SUM( CASE WHEN POS = 1 THEN MONTO2 ELSE MONTO2*-1 END) MONTO2
FROM (
      SELECT FECHA_CARGA
           , SUM(MONTO1) MONTO1
           , SUM(MONTO2) MONTO2
           , ROWNUM AS POS
      FROM TABLA1
      WHERE ROWNUM < 3
      GROUP BY FECHA_CARGA
      ORDER BY FECHA_CARGA DESC
     );

Espero te sirva...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar