2012-02-01 13 views
7

में पिछले रिकॉर्ड करने के लिए रिकॉर्ड की तुलना मैं इस तरह PostgresSQL डीबी में एक टेबल है:PostgreSQL

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 

बहुत बहुत धन्यवाद !!!

उत्तर

9
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

+0

यह एक अच्छा काम करता है से अधिक है। धन्यवाद। – Alex

+0

'विन्डो क्लाइंट_विंडो' उपनाम अच्छा है, यह नोट करते हुए कि एक – Davos