我在PostgreSQL DB中有一个像这样的表:
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
如何获得此结果?
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
非常感谢!!!
答案 0 :(得分:10)
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;
这假设enddate始终大于同一行的startdate,并且没有enddate大于以下startdate