日期:2014-05-17  浏览次数:20685 次

求一条SQl语句????????
A               B             C
a001                     2006-1-1
a001         10         2006-2-1
a001         30         2006-3-1
a001         20         2006-4-1
b001                     2005-1-1
b001         30         2006-2-1
b001         25.5     2006-3-1  
c001                     2007-3-1
c001         30         2006-5-1
c001         15         2007-2-1
c001         50         2007-1-1
---------------------------
结果:
A               B           C
a001         20         2006-4-1
b001         25.5     2006-3-1
c001         15         2007-2-1

取出C列中时间最大的并且B   不为空的记录(不能有A重复的记录)

------解决方案--------------------
SQL> select * from a_max;

A B C
----- ----- ----------
a001 20060101
a001 10 20060201
a001 30 20060301
a001 20 20060401
b001 20060101
b001 30 20060201
b001 25.5 20060301
c001 20060301
c001 30 20060501
c001 15 20070201
c001 50 20070101

已选择11行。

SQL> select a.a,a.b,a.c from a_max a,
2 (select a,max(c) c_max from a_max group by a) b
3 where a.c=b.c_max and a.a=b.a
4 and a.b is not null
5 ;

A B C
----- ----- ----------
a001 20 20060401
b001 25.5 20060301
c001 15 20070201

------解决方案--------------------
create table test (a varchar2(10),b number,c varchar2(12))

insert into test(a,c) values( 'a001 ', '2006-1-1 ');
insert into test values( 'a001 ',10, '2006-2-1 ');
insert into test values( 'a001 ',30, '2006-3-1 ');
insert into test values( 'a001 ',20, '2006-4-1 ');
insert into test(a,c) values( 'b001 ', '2005-1-1 ');
insert into test values( 'b001 ',30, '2006-2-1 ');
insert into test values( 'b001 ',25.5, '2006-3-1 ');
insert into test(a,c) values( 'c001 ', '2007-3-1 ');
insert into test values( 'c001 ',30, '2006-5-1 ');
insert into test values( 'c001 ',15, '2007-2-1 ');
insert into test values( 'c001 ',50, '2007-1-1 ');

select a.a, b,a.c from test,
(select a,max(c) c from test
where b is not null
group by a) a
where test.a = a.a and test.c = a.c