user_shebao 这个表里是模拟了用户缴纳社保的流水,username是用户名,comp_id是公司编号,fee_month是缴纳社保的月份,一个用户缴纳社保的月份可能不是连续的,因为中间有可能会断缴,还有同一个用户的公司编号有可能会重复(他可能从某一个公司离职,过了一段时间又回到这个公司工作了)需要写一个sql,得到如下的数据:用户名称 公司编号 在该公司缴纳的开始月份 在该公司缴纳的结束月份

最后需要的结果如下:
USERNAME COMP_ID START_MONTH END_MONTH
aaa 1000 200601 200605
aaa 1020 200606 200611
aaa 1032 200612 200704
aaa 1000 200706 200709
bbb 1010 200601 200607
bbb 1066 200608 200701
bbb 1289 200702 200708

答案:

select username,comp_id,min(fee_month) startmonth,max(fee_month) lastmonth
from user_shebao
group by username,comp_id ,ADD_MONTHS(to_date(fee_month,'yyyymm'),-rownum)
order by username,startmonth;

 

posted on 2016-10-13 11:25  风吹羽  阅读(517)  评论(0编辑  收藏  举报