Comparing a record to a previous post in postgresql

I have a table in PostgresSql 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 

How to get this result?

  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 

Thank you so much!

+7
source share
1 answer
 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 line and that enddate is greater than the next start

+9
source

All Articles