Anthony muchas gracias por responder, NVL es una función de Oracle, actualmente trabajo con 2 motores Oracle para el sistema antiguo y PostgreSQL para el sistema nuevo al cual se esta migrando todo y pues la prueba la hice en Oracle.
Voy a leer mas sobre LEAD, si alguien tiene un ejemplo por favor comparta que me seria de mucha utilidad. Saludos. El 28 de abril de 2016, 21:02, Anthony Sotolongo <asotolo...@gmail.com> escribió: > Alberto, ¿te fijaste en la doc que a la función ventana lead() le puedes > indicar otros atributos para que devuelva un resultado u otro(offset y > default value)? > > lead(value anyelement [,offset integer [, defaultanyelement ]]) > > tal vez eso te pueda ayudar con lo que quieres > > Esa Función NVL es desarrollada por ti o estas usando una extensión o > producto distinto a PostgreSQL Comunitario? pues la verdad no la recuerdo > :( , > > > Saludos > > > > El 4/28/2016 a las 8:06 PM, Alberto Cuevas escribió: > > 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 (< > jmaurici...@yahoo.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. >> > >