学生每天竞技比赛,赢了得分,输了负分,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希望求的表格: 学号 姓名 最低分 最低分日期 之前的最高分 之后的最高分

万分感谢各位大牛的帮助啊!!!!

解决方案 »

  1.   


    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
    */
      

  2.   


    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
      

  3.   

    --日期 学号 姓名 成绩
    --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 行受影响)
      

  4.   

    --日期 学号 姓名 成绩
    --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 行受影响)
      

  5.   

    杯具了,复杂点的sql就不会写了,怎么搞啊
      

  6.   

    var _Data in _DB.BS
        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 很简单