---------- Mensaje enviado ---------- De: Hellmuth Vargas <hiv...@gmail.com> Fecha: 18 de abril de 2016, 13:18 Asunto: Re: [pgsql-es-ayuda] Restar dos campos de tipo fecha de distintos registros Para: Alberto Cuevas <betocuevas....@gmail.com> CC: Gerardo Herzig <gher...@fmed.uba.ar>, Lista Postgres ES < pgsql-es-ayuda@postgresql.org>
Hola lista Con Window Functions ( http://www.postgresql.org/docs/9.4/static/tutorial-window.html) puede realizar eso...para el problema especifico seria asi: SELECT *, LAG(FechaInicial) over(order by Ord),FechaFinal-LAG(FechaInicial) over(order by Ord) as diferencia from (values (1,cast('01/10/2015' as date),cast('01/12/2015' as date)), (2,cast('01/08/2015' as date),cast('01/10/2015' as date)), (3,cast('01/06/2015' as date),cast('01/08/2015' as date)), (4,cast('01/05/2015' as date),cast('01/06/2015' as date)), (5,cast('01/04/2015' as date),cast('01/05/2015' as date)), (6,cast('01/03/2015' as date),cast('01/04/2015' as date)), (7,cast('01/02/2015' as date),cast('01/03/2015' as date)), (8,cast('01/01/2015' as date),cast('28/01/2015' as date)), (9,cast('01/12/2014' as date),cast('01/01/2015' as date)), (10,cast('01/11/2014' as date),cast('01/12/2014' as date))) as a(Ord,FechaInicial,FechaFinal) con resultado Ord FechaInicial FechaFinal fechaInicialFilaAnterior Diferencia 1 2015-10-01 2015-12-01 2 2015-08-01 2015-10-01 2015-10-01 0 3 2015-06-01 2015-08-01 2015-08-01 0 4 2015-05-01 2015-06-01 2015-06-01 0 5 2015-04-01 2015-05-01 2015-05-01 0 6 2015-03-01 2015-04-01 2015-04-01 0 7 2015-02-01 2015-03-01 2015-03-01 0 8 2015-01-01 2015-01-28 2015-02-01 -4 9 2014-12-01 2015-01-01 2015-01-01 0 10 2014-11-01 2014-12-01 2014-12-01 0 El 18 de abril de 2016, 15:50, Alvaro Herrera<alvhe...@2ndquadrant.com> escribió: > Alberto Cuevas escribió: > > Muchas gracias por responder, disculpen por no dar un ejemplo mas claro, > mi > > tabla tiene los registros similar a esto: > > > > |Ord. | FechaInicial | FechaFinal | > > |1 | 01/10/2015 | 01/12/2015 | > > |2 | 01/08/2015 | 01/10/2015 | > > |3 | 01/06/2015 | 01/08/2015 | > > |4 | 01/05/2015 | 01/06/2015 | > > |5 | 01/04/2015 | 01/05/2015 | > > |6 | 01/03/2015 | 01/04/2015 | > > |7 | 01/02/2015 | 01/03/2015 | > > |8 | 01/01/2015 | 28/01/2015 | > > |9 | 01/12/2014 | 01/01/2015 | > > |10 | 01/11/2014 | 01/12/2014 | > > > > Debo restar FechaFinal - FechaInicial es decir: > > > > FechaFinal de Ord. 2 - FechaInicial de Ord.1 = 0 dias > > FechaFinal de Ord. 3 - FechaInicial de Ord.2 = 0 dias > > ...... > > Y asi sucesivamente.. > > La función ventana LAG() puede retornar el valor en el registro > anterior; o si declaras ventanas de tamaño uno, la función first_value() > debería servir también. Ver > http://www.postgresql.org/docs/current/static/functions-window.html > > -- > Álvaro Herrera http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services > > - > Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org > ) > Para cambiar tu suscripción: > http://www.postgresql.org/mailpref/pgsql-es-ayuda > -- Cordialmente, Ing. Hellmuth I. Vargas S. Esp. Telemática y Negocios por Internet Oracle Database 10g Administrator Certified Associate EnterpriseDB Certified PostgreSQL 9.3 Associate