有表如下,要从中把开始和结束日期在2007-01-26到2007-02-25之间同时开始日期最大的几条数据取出来。开始日期       结束日期            A      B      C
2006-12-26     2007-01-25           A      A    1000
2006-12-26     2007-01-25           A      B    1000
2007-01-12     2007-01-25           B      D    1000
2007-01-12     2007-01-25           C      W    1000
2007-01-26     2007-02-25           D      F    1000
2007-01-26     2007-02-25           A      W    1000
2007-02-12     2007-02-25           A      B    1000
2007-02-12     2007-02-25           B      L    1000
2007-02-26     2007-03-25           E      T    1000
2007-02-26     2007-03-25           F      N    1000

解决方案 »

  1.   

    最大的是什么??A、B、C??还是日期
      

  2.   


    --得到A最大的
    SELECT * 
    FROM TABLENAME T 
    WHERE EXISTS(SELECT 1 FROM TABLENAME WHERE T.开始日期=开始日期 AND T.结束日期=结束日期 AND T.A>A)
    --得到B最大的
    SELECT * 
    FROM TABLENAME T 
    WHERE EXISTS(SELECT 1 FROM TABLENAME WHERE T.开始日期=开始日期 AND T.结束日期=结束日期 AND T.B>B)
      

  3.   

    不太明白,是不是要取开始,结束日期与2007-01-26到2007-02-25有交叉的?如果是,where 里可以这样写:
    开始日期<'20070225'+1 and 结束日期>='20070126'
      

  4.   

    2007-01-26到2007-02-25之间同时开始日期最大的几条数据取出来。结果应该如下:
    2007-02-12     2007-02-25           A      B    1000
    2007-02-12     2007-02-25           B      L    1000
      

  5.   

    create  table dtime
    (
     开始日期  datetime ,
     结束日期   datetime,


     A  varchar(10), 
     B  varchar(10),
     C  int
    )
    delete dtimeinsert into dtime
    select '2006-12-26'   ,  '2007-01-25'      ,     'A'    ,  'A'   , 1000 
    union all
    select '2006-12-26'   ,  '2007-01-25'    ,      'A'    ,  'B'   , 1000 
    union all
    select  '2007-01-12'  ,   '2007-01-25'     ,     'B'   ,   'D'  ,  1000 
    union all
    select '2007-01-12 '  ,  '2007-01-25'     ,      'C'  ,    'W'   , 1000 
    union all
    select '2007-01-26'   ,  '2007-02-25 '    ,     'D' ,    'F' ,   1000 
    union all
    select '2007-01-26'   ,  '2007-02-25 '      ,   'A'  ,   'W'  ,  1000 
    union all
    select '2007-02-12'   ,  '2007-02-25 '       ,   'A'   ,  'B' ,   1000
     union all
    select '2007-02-12 '   , '2007-02-25 '    ,      'B'   ,   'L' ,   1000 
    union all
    select '2007-02-26'    , '2007-03-25  '   ,     ' E'   ,   'T',   1000 
    union all
    select '2007-02-26'    , '2007-03-25'      ,     'F'   ,  'N'   , 1000
    select max(开始日期),结束日期, A,B,C from dtime  
    where  开始日期 >= '2007-01-26' and 开始日期 < '2007-02-25 '
    and
           结束日期 > '2007-01-26' and  结束日期 <= '2007-02-25'
    group by 结束日期, A,B,C
      

  6.   

    select top 2 * from dtime
    where 
    开始日期>='2007-01-26'
    and
    结束日期<='2007-02-25'
    order by 开始日期 desc
      

  7.   

    SELECT * FROM Table
    WHERE 开始日期 IN 
    (
       SELECT MAX(开始日期) FROM Table 
       WHERE 开始日期 BETWEEN '2007-01-26' AND '2007-02-25' 
    )
    AND 开始日期 BETWEEN '2007-01-26' AND '2007-02-25' 
    AND 结束日期 BETWEEN '2007-01-26' AND '2007-02-25'