In Java application development, ordered or cross-row computation based on database is oftenly involved, such as the last three, the previous one of the current record, the top five, the last but one, and the ranking of a certain record.

For instance,to find out the monthly growth rate of contract values for each sales man in the first half year of 2013 in a Contract table. We need to firstly group by salesman, group by year within each group, group by month for each year and summarize, and lastly, perform the inter-row computation between the current month and its previous month.

How do you deal with it? can you give some suggestions on it?