日期:2014-05-18 浏览次数:20630 次
declare @t table (日期 datetime,学号 int,姓名 varchar(4),成绩 int) insert into @t select '2010/10/15',1,'张三',12 union all select '2010/10/15',2,'李四',-8 union all select '2010/10/15',3,'王五',15 union all select '2010/10/16',1,'张三',21 union all select '2010/10/16',2,'李四',-22 union all select '2010/10/17',1,'张三',12 union all select '2010/10/18',2,'李四',-10 union all select '2010/10/19',3,'王五',11 union all select '2010/11/16',1,'张三',13 union all select '2010/11/18',3,'王五',-23 union all select '2010/11/18',1,'张三',19 union all select '2010/11/18',2,'李四',0 select 学号 , 姓名 , 成绩 as 最低分 , convert(varchar(10), 日期, 120) as 最低分日期 , ( select max(成绩) from @t where 日期 < m.日期 and 学号 = m.学号 ) as 之前的最高分 , ( select max(成绩) from @t where 日期 > m.日期 and 学号 = m.学号 ) 之后的最高分 from ( select * from @t t where 成绩 = ( select min(成绩) from @t b where 学号 = t.学号 ) ) m /* 学号 姓名 最低分 最低分日期 之前的最高分 之后的最高分 ----------- ---- ----------- ---------- ----------- ----------- 1 张三 12 2010-10-15 NULL 21 1 张三 12 2010-10-17 21 19 2 李四 -22 2010-10-16 -8 0 3 王五 -23 2010-11-18 15 NULL */
------解决方案--------------------
--日期 学号 姓名 成绩 --2010/10/15 1 张三 12 --2010/10/15 2 李四 -8 --2010/10/15 3 王五 15 --2010/10/16 1 张三 21 --2010/10/16 2 李四 -22 --2010/10/17 1 张三 12 --2010/10/18 2 李四 -10 --2010/10/19 3 王五 11 --2010/11/16 1 张三 13 --2010/11/18 3 王五 -23 --2010/11/18 1 张三 19 --2010/11/18 2 李四 0 if OBJECT_ID('tb')is not null drop table tb go CREATE TABLE tb(日期 varchar(50), 学号 int,姓名 varchar(50), 成绩 int) insert into tb values('2010/10/15' ,1 ,'张三' ,12) insert into tb values('2010/10/15', 2 ,'李四', -8) insert into tb values('2010/10/15', 3, '王五', 15) insert into tb values('2010/10/16', 1 ,'张三', 21) insert into tb values('2010/10/16', 2 ,'李四', -22) insert into tb values('2010/10/17' ,1 ,'张三', 12) insert into tb values('2010/10/18', 2 ,'李四', -10) insert into tb values('2010/10/19', 3, '王五', 11) insert into tb values('2010/11/16', 1 ,'张三', 13) insert into tb values('2010/11/18', 3, '王五', -23) insert into tb values('2010/11/18', 1, '张三', 19) insert into tb values('2010/11/18', 2 ,'李四', 0) --希望求的表格: --学号 姓名 最低分 最低分日期 之前的最高分 之后的最高分 select 学号,姓名,成绩 as 最低分, 日期 as 最低分日期 , ( select max(成绩) from tb where 日期 < s.日期 and 学号 = s.学号) 之前的最高分 , ( select max(成绩) from tb where 日期 > s.日期 and 学号 = s.学号) 之后的最高分 from ( select * from tb t where 成绩=(select min(成绩) from tb b where 学号 = t.学号)) s 学号 姓名 最低分 最低分日期 之前的最高分 之后的最高分 ----------- -------------------------------------------------- ----------- -------------------------------------------------- ----------- ----------- 1 张三 12 2010/10/15