From: | Alberto Cuevas <betocuevas(dot)net(at)gmail(dot)com> |
---|---|
To: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Restar dos campos de tipo fecha de distintos registros |
Date: | 2016-04-28 23:06:53 |
Message-ID: | CA+mENxpQEL0tuCJ8sE8ZmMCh+MhucM0=pAS5RfoZcH+NJYTp+Q@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola nuevamente, gracias por el apoyo brindado pude obtener lo que queria
con funcion de ventana, pero esto mismo necesito aplicar pero a otro caso.
Tengo una tabla con una estructura similar a esto:
| COD_PER | COD_INSC | FEC_INICIAL | FEC_FINAL | | 011650 | 0054010 |
16/01/2015 | 16/01/2015 | | 011650 | 0054010 | 01/01/2015 | 16/01/2015 | |
011650 | 0054010 | 01/10/2014 | 01/01/2015 | | 011650 | 0054010 |
01/07/2014 | 01/10/2014 | | 011650 | 0054010 | 01/04/2014 | 01/07/2014 | |
011650 | 0054010 | 01/02/2014 | 01/04/2014 | | 011650 | 0054010 |
01/01/2014 | 01/02/2014 | | 011650 | 0054010 | 01/10/2013 | 01/01/2014 | |
011650 | 0054010 | 17/07/2013 | 01/10/2013 |
Utilice:
LEAD(S.FEC_FIN) OVER (ORDER BY S.COD_PER ASC, S.FEC_FIN DESC) AS FEC_FINAL,
NVL(ABS(S.FEC_INI - LEAD(S.FEC_FIN) OVER (ORDER BY S.COD_PER ASC, S.NRO
DESC)), 0) AS DIAS,
ROW_NUMBER() OVER (PARTITION BY S.COD_PER ORDER BY S.COD_PER ASC,
S.COD_INSC DESC) AS ITEM
Y obtuve esto:
| COD_PER | COD_INSC | FEC_INICIAL | FEC_FINAL | DIAS | ITEM | | 011650 |
0054010 | 16/01/2015 | 16/01/2015 | 0 | 1 | | 011650 | 0054010 | 01/01/2015
| 01/01/2015 | 0 | 2 | | 011650 | 0054010 | 01/10/2014 | 01/10/2014 | 0 | 3
| | 011650 | 0054010 | 01/07/2014 | 01/07/2014 | 0 | 4 | | 011650 | 0054010
| 01/04/2014 | 01/04/2014 | 0 | 5 | | 011650 | 0054010 | 01/02/2014 |
01/02/2014 | 0 | 6 | | 011650 | 0054010 | 01/01/2014 | 01/01/2014 | 0 | 7 |
| 011650 | 0054010 | 01/10/2013 | 01/10/2013 | 0 | 8 | | 011650 | 0054010 |
17/07/2013 | | 0 | 9 |
Las pruebas solo las hice con el COD_PER 011650, pero cuando quiero de
todos los codigos pues observe lo siguiente:
| COD_PER | COD_INSC | FEC_INICIAL | FEC_FINAL | DIAS | ITEM | | 011650 |
0054010 | 16/01/2015 | 16/01/2015 | 0 | 1 | | 011650 | 0054010 | 01/01/2015
| 01/01/2015 | 0 | 2 | | 011650 | 0054010 | 01/10/2014 | 01/10/2014 | 0 | 3
| | 011650 | 0054010 | 01/07/2014 | 01/07/2014 | 0 | 4 | | 011650 | 0054010
| 01/04/2014 | 01/04/2014 | 0 | 5 | | 011650 | 0054010 | 01/02/2014 |
01/02/2014 | 0 | 6 | | 011650 | 0054010 | 01/01/2014 | 01/01/2014 | 0 | 7 |
| 011650 | 0054010 | 01/10/2013 | 01/10/2013 | 0 | 8 | | 011650 | 0054010 |
17/07/2013 | 31/10/2015 | 836 | 9 | | 011658 | 0072885 | 31/10/2015 |
31/10/2015 | 0 | 1 | | 011658 | 0072885 | 01/10/2015 | 01/10/2015 | 0 | 2 |
| 011658 | 0072885 | 01/09/2015 | 01/09/2015 | 0 | 3 | | 011658 | 0072885 |
01/07/2015 | 01/07/2015 | 0 | 4 | | 011658 | 0072885 | 01/06/2015 |
01/06/2015 | 0 | 5 | | 011658 | 0072885 | 01/05/2015 | 01/05/2015 | 0 | 6 |
Que en el siguiente registro se esta restando FEC_FINAL del COD_PER 011658
con FEC_INICIAL del COD_PER 011650, lo cual no debe ser:
| 011650 | 0054010 | 17/07/2013 | 31/10/2015 | 836 | 9 |
Hay forma de que por cada codigo la ultima FEC_INICIAL quede vacia por cada
COD_PER
Y solo reste las fechas FEC_INICIAL y FEC_FINAL por cada COD_PER y quede
algo asi:
| 011650 | 0054010 | 01/01/2014 | 01/01/2014 | 0 | 7 |
| 011650 | 0054010 | 01/10/2013 | 01/10/2013 | 0 | 8 |
| 011650 | 0054010 | 17/07/2013 |
| 0 | 9 |
| 011658 | 0072885 | 31/10/2015 | 31/10/2015 | 0 | 1 |
| 011658 | 0072885 | 01/10/2015 | 01/10/2015 | 0 | 2 |
| 011658 | 0072885 | 01/09/2015 | 01/09/2015 | 0 | 3 |
Gracias por su ayuda.
El lun., 18 abr. 2016 a las 21:33, mauricio pullabuestan (<
jmauriciopb(at)yahoo(dot)es>) escribió:
> Hola Alberto.
>
>
> Como dice Hellmuth usa funciones de ventana, es lo mejor.
>
> Puse el ejemplo de Hellmuth en este link http://sqlfiddle.com/#!15/71cbd/1
>
> Espero no se moleste.
> Saludos.
>
> Mauricio.
>
From | Date | Subject | |
---|---|---|---|
Next Message | Anthony Sotolongo | 2016-04-29 02:02:49 | Re: Restar dos campos de tipo fecha de distintos registros |
Previous Message | Edwin De La Cruz | 2016-04-28 18:30:52 | Re: Como obtener el ultimo registro de un rango de registros [SOLUCIONADO] |