表TEST:
id 主键
loanid 为贷款号
status 状态值
orderdate 生成日期
other 其他等值
sql:
create table test1(id integer,loanid integer,status integer,orderdate date,other integer);
insert into test1 values(1,1011,1,to_date('20090201','yyyymmdd'),3);
insert into test1 values(2,1011,2,to_date('20090201','yyyymmdd'),1);
insert into test1 values(3,1011,2,to_date('20090203','yyyymmdd'),311);
insert into test1 values(4,1011,1,to_date('20090204','yyyymmdd'),123);
insert into test1 values(5,1011,3,to_date('20080201','yyyymmdd'),33);
insert into test1 values(6,1012,1,to_date('20080301','yyyymmdd'),775);
insert into test1 values(7,1012,1,to_date('20080401','yyyymmdd'),55);
insert into test1 values(8,1012,1,to_date('20080101','yyyymmdd'),31);
insert into test1 values(9,1013,1,to_date('20090801','yyyymmdd'),883);
insert into test1 values(10,1013,2,to_date('20090801','yyyymmdd'),12);
insert into test1 values(11,1013,1,to_date('20090601','yyyymmdd'),23);
insert into test1 values(12,1013,3,to_date('20090701','yyyymmdd'),45);
insert into test1 values(13,1013,3,to_date('20090401','yyyymmdd'),1);
insert into test1 values(14,1013,1,to_date('20090801','yyyymmdd'),354);
commit;
实现功能:
根据loanid分组,根据orderdate排序,如果前后两个status值相同,则把最后排序的orderdate值更新到最前的orderdate,
并删除后面的记录。other值取最小排序的数值。
即:在相同loanid下,在连续的时间段下,只能保留一个status值,且在连续时间段下的最小的orderdate值更新为最大的orderdate值。
例如:
我用查询语句:
select * from test1
order by loanid,orderdate;
ID
LOANID
STATUS
ORDERDATE
OTHER
5
1011
3
2008-2-1
33
1
1011
1
2009-2-1
3
2
1011
2
2009-2-1
1
3
1011
2
2009-2-3
311
4
1011
1
2009-2-4
123
8
1012
1
2008-1-1
31
6
1012
1
2008-3-1
775
7
1012
1
2008-4-1
55
13
1013
3
2009-4-1
1
11
1013
1
2009-6-1
23
12
1013
3
2009-7-1
45
9
1013
1
2009-8-1
883
10
1013
2
2009-8-1
12
14
1013
1
2009-8-1
354
得到的结果应该为:
5
1011
3
2008-2-1
33
1
1011
1
2009-2-1
3
2
1011
2
2009-2-3
1
4
1011
1
2009-2-4
123
8
1012
1
2008-4-1
31
13
1013
3
2009-4-1
1
11
1013
1
2009-6-1
23
12
1013
3
2009-7-1
45
9
1013
1
2009-8-1
883
10
1013
2
2009-8-1
12
14
1013
1
2009-8-1
354
[ 本帖最后由 kingtmx 于 2010-2-9 12:16 编辑 ]
|