学生每天竞技比赛,赢了得分,输了负分,0表示当天没参加比赛。现在我想求比如2010/10/15 - 2010/11/16期间
每个学生的最低分,
获得这个最低分的日期,
每个学生获得各自最低分的日期之前获得的最高分
每个学生获得各自最低分的日期之后获得的最高分
日期 学号 姓名 成绩
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希望求的表格: 学号 姓名 最低分 最低分日期 之前的最高分 之后的最高分
万分感谢各位大牛的帮助啊!!!!
解决方案 »
- 求一个SQL语句
- ·个位大虾,做数据库开发,设计的应该需要那些技能啊,要精通象C#,JAVA...这样的编程语言吗?
- 有用sagent的吗,我的服务启不来呀,急呀...
- 急急.,.,怎么样动态声明变量..,
- 50分跪求高手或版主推荐几款大家常用的数据库表设计工具!
- 数据存储长度不够?
- where条件里 用变量和用字符串结果不一样
- Sql server 2005 两个实例如何分别对应一个单独的IP地址?
- 用select * into #temp1 from table1生成的lin時表能不能把自動編號的列取消..
- 真的很着急!难道非得去问微软的人才行?
- sql server 2008 创建储存过程看不到
- 关于sql版本的选择
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
*/
select 学号,姓名,成绩 as 最低分,convert(varchar(10), 日期, 120) as 最低分日期 ,
( select max(成绩) from tablename where 日期 < m.日期 and 学号 = m.学号) 之前的最高分 ,
( select max(成绩) from tablename where 日期 > m.日期 and 学号 = m.学号) 之后的最高分
from ( select * from tablename t where 成绩 = (select min(成绩) from tablename b where 学号 = t.学号)) m
--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 李四 0if 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 学号,姓名, min(成绩) as 最低分,日期,
(select max(成绩) from tb where 学号=t.学号 and 日期<t.日期) as 之前的最高分 ,
(select max(成绩) from tb where 学号=t.学号 and 日期>t.日期) as 之后的最高分
from tb t group by 日期,学号,姓名
学号 姓名 最低分 日期 之前的最高分 之后的最高分
----------- -------------------------------------------------- ----------- -------------------------------------------------- ----------- -----------
1 张三 12 2010/10/15 NULL 21
2 李四 -8 2010/10/15 NULL 0
3 王五 15 2010/10/15 NULL 11
1 张三 21 2010/10/16 12 19
2 李四 -22 2010/10/16 -8 0
1 张三 12 2010/10/17 21 19
2 李四 -10 2010/10/18 -8 0
3 王五 11 2010/10/19 15 -23
1 张三 13 2010/11/16 21 19
1 张三 19 2010/11/18 21 NULL
2 李四 0 2010/11/18 -8 NULL
3 王五 -23 2010/11/18 15 NULL(12 行受影响)
--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 李四 0if 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 NULL 21
1 张三 12 2010/10/17 21 19
2 李四 -22 2010/10/16 -8 0
3 王五 -23 2010/11/18 15 NULL(4 行受影响)
group _Data by _Data.xuehao into _Result
select new bg{
XM=_Result.first().xm,
xuehao=_Result.first().xuehao,
ZDF=_Result.orderby(_Item=>_Item.FS).first().FS,
QZGF=_Result.where(_Item=>_Item.Addtime>(_Result.ordreby (_Item=>_Item.FS).Addtime)).orderby(_Item=>_Item.Addtime).first().FS,
QZGF=_Result.where(_Item=>_Item.Addtime<(_Result.ordreby(_Item=>_Item.FS).Addtime)).orderby(_Item=>_Item.Addtime).first().FS
};
linq 很简单