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
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

OBTENER REGISTROS CON LAS DOS MAS RECIENTES FECHAS

Publicado por Rafael Mendoza (328 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