Comparación de registro con registro anterior en postgresql

I have a table in PostgreSQL DB like this:

 Client | Rate | StartDate|EndDate     
 A      | 1000 | 2005-1-1 |2005-12-31
 A      | 2000 | 2006-1-1 |2006-12-31
 A      | 3000 | 2007-1-1 |2007-12-31  
 B      | 5000 | 2006-1-1 |2006-12-31  
 B      | 8000 | 2008-1-1 |2008-12-31  
 C      | 2000 | 2006-1-1 |2006-12-31  

¿Cómo obtener este resultado?

 Client | Rate | StartDate|EndDate    |Pre Rate | Pre StartDate |Pre EndDate    
 A      | 1000 | 2005-1-1 |2005-12-31 |         |               |             
 A      | 2000 | 2006-1-1 |2006-12-31 | 1000    | 2005-1-1      |2005-12-31            
 A      | 3000 | 2007-1-1 |2007-12-31 | 2000    | 2006-1-1      |2006-12-31  
 B      | 5000 | 2006-1-1 |2006-12-31 |         |               |              
 B      | 8000 | 2008-1-1 |2008-12-31 | 5000    | 2006-1-1      |2006-12-31   
 C      | 2000 | 2006-1-1 |2006-12-31 

¡¡¡Muchas gracias!!!

preguntado el 01 de febrero de 12 a las 22:02

1 Respuestas

SELECT client, 
       rate,
       startdate, 
       enddate, 
       lag(rate) over client_window as pre_rate,
       lag(startdate) over client_window as pre_startdate,
       lag(enddate) over client_window as pre_enddate
FROM the_table
WINDOW client_window as (partition by client order by startdate)
ORDER BY client, stardate;

This assumes that enddate is always greater than startdate from the same row and that no enddate is greater than the following startdate

Respondido 02 Feb 12, 02:02

los WINDOW client_window alias is nice, noting that one - Davos

I made a solution to similar problem without knowing this. Lets just say it wasn't pretty. Thanks allot. - Peter Mølgaard Pallesen

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.