在同一张表中,有两个字段begin_date和end_date,有多条记录但时间是不一样的,我有两个条件1、要取所有begin_date相同而end_date不同的一系列数据2、符合1条件的同时还要end_date-begin_date是最小的那条数据
我要的sql语句就是符合1,2条件的要求。请注意是一张表,请高手帮忙写这个语句,万分感谢!

解决方案 »

  1.   

    SELECT begin_date,min(end-date-begin_date) diff_date from t group by begin_date
      

  2.   


    这个sql语句有点漏洞,没有排除掉单条begin_date的记录,而且也没有取得表的数据记录。
      

  3.   

    select * from A;
    ---A表结果如下-------------------------------------------------------
    1 111 11111111 2008-01-02 2009-06-13 16:47:21 2009-06-13 16:48:21
    2 112 11111111 2008-09-22 2009-06-13 16:47:21 2009-06-13 16:49:21
    3 113 11111111 2008-04-11 2009-06-13 16:47:21 2009-06-13 16:50:21
    4 114 22222222 2009-01-02 2009-06-13 16:46:21 2009-06-13 16:51:21
    5 115 22222222 2009-03-02 2009-06-13 16:46:21 2009-06-13 16:52:21
    6 116 33333333 2008-02-02 2009-06-13 16:45:21 2009-06-13 16:53:21   /*写出楼主需要的sql语句,可能不一定是效率最高的,但是实现了楼主的要求*/
    select a2.* from

          select begin_date,min(end_date-begin_date) minva, count(*) rn  from A group by A.Begin_Date
    )a1 inner join A a2
    on a1.begin_date=a2.begin_date and a1.minva=(a2.end_date-a2.begin_date) and a1.rn>1--执行结果如下:------------------------------------------------------
    1 111 11111111 2008-01-02 2009-06-13 16:47:21 2009-06-13 16:48:21
    2 114 22222222 2009-01-02 2009-06-13 16:46:21 2009-06-13 16:51:21
      

  4.   

    select * from A;
    ---A表结果如下--------------------------------------------------------------------------------
    1 111 11111111 2008-01-02 2009-06-13 16:47:21 2009-06-13 16:48:21
    2 112 11111111 2008-09-22 2009-06-13 16:47:21 2009-06-13 16:49:21
    3 113 11111111 2008-04-11 2009-06-13 16:47:21 2009-06-13 16:50:21
    4 114 22222222 2009-01-02 2009-06-13 16:46:21 2009-06-13 16:51:21
    5 115 22222222 2009-03-02 2009-06-13 16:46:21 2009-06-13 16:52:21
    6 116 33333333 2008-02-02 2009-06-13 16:45:21 2009-06-13 16:53:21   /*写出楼主需要的sql语句,可能不一定是效率最高的,但是实现了楼主的要求*/
    select a2.* from

          select begin_date,min(end_date-begin_date) minva, count(*) rn  from A group by A.Begin_Date
    )a1 inner join A a2
    on a1.begin_date=a2.begin_date and a1.minva=(a2.end_date-a2.begin_date) and a1.rn>1--执行结果如下:-----------------------------------------------------------------------------------
    1 111 11111111 2008-01-02 2009-06-13 16:47:21 2009-06-13 16:48:21
    2 114 22222222 2009-01-02 2009-06-13 16:46:21 2009-06-13 16:51:21