求一个SQL
 工号              姓名          时间
IHH101736 張二賀 2010-12-31 00:00:00
IHH101736 張二賀 2011-07-01 00:00:00
IHH101736 張二賀 2013-01-01 00:00:00
IHH101741 艾維平 2011-01-01 00:00:00
IHH102052 吳細波 2010-12-01 00:00:00
IHH102052 吳細波 2011-01-01 00:00:00
有没有办法根据上面的表中的时间字段,得出,如果有相同工号的,下一笔和上一笔的时间差,所以日期的初始时间为2010-01-01(每个工号的最早日期和初始日期得出时间间隔)
 工号              姓名          时间                    时间间隔
IHH101736 張二賀 2010-12-31 00:00:00
IHH101736 張二賀 2011-07-01 00:00:00
IHH101736 張二賀 2013-01-01 00:00:00
IHH101741 艾維平 2011-01-01 00:00:00
IHH102052 吳細波 2010-12-01 00:00:00
IHH102052 吳細波 2011-01-01 00:00:00

解决方案 »

  1.   

    if object_id('[TB]') is not null drop table [TB]
    go
    create table [TB] (工号 nvarchar(18),姓名 nvarchar(6),时间 datetime)
    insert into [TB]
    select 'IHH101736','張二賀','2010-12-31 00:00:00' union all
    select 'IHH101736','張二賀','2011-07-01 00:00:00' union all
    select 'IHH101736','張二賀','2013-01-01 00:00:00' union all
    select 'IHH101741','艾維平','2011-01-01 00:00:00' union all
    select 'IHH102052','吳細波','2010-12-01 00:00:00' union all
    select 'IHH102052','吳細波','2011-01-01 00:00:00'select * from [TB];WITH TT
    AS(SELECT ROW_NUMBER() OVER(PARTITION BY 工号 ORDER BY 时间) AS num,* FROM TB)
    SELECT A.工号,A.姓名,A.时间,DATEDIFF(dd,B.时间,A.时间) AS 时间间隔
    FROM TT A
    left JOIN TT B ON A.工号 = B.工号 AND A.num = b.num + 1/*工号 姓名 时间 时间间隔
    IHH101736 張二賀 2010-12-31 00:00:00.000 NULL
    IHH101736 張二賀 2011-07-01 00:00:00.000 182
    IHH101736 張二賀 2013-01-01 00:00:00.000 550
    IHH101741 艾維平 2011-01-01 00:00:00.000 NULL
    IHH102052 吳細波 2010-12-01 00:00:00.000 NULL
    IHH102052 吳細波 2011-01-01 00:00:00.000 31*/  --?
      

  2.   

    select 工号,姓名,时间,时间间隔=case when 上次时间 IS not null) then  DATEDIFF(MINUTE,上次时间,时间) else 0 end
    from 
    (
    select 工号,姓名,时间,上次时间=(select top 1 时间 from tb b where a.工号=b.工号 and b.时间<a.时间 order by 时间 desc)
    from tb a
    )t
      

  3.   

    如果按天计算,则把MINUTE改为DAY
      

  4.   

    数据库是2000的,没有ROW_NUMBER()  函数啊
      

  5.   


    DECLARE @i TABLE(num INT IDENTITY(1,1),工号 nvarchar(18),姓名 nvarchar(6),时间 DATETIME)  --借助表变量INSERT INTO @i(工号,姓名,时间)
    SELECT 工号,姓名,时间 FROM dbo.TBSELECT A.工号,A.姓名,A.时间,DATEDIFF(dd,B.时间,A.时间) AS 时间间隔
    FROM @i A
    left JOIN @i B ON A.工号 = B.工号 AND A.num = b.num + 1/*
    工号 姓名 时间 时间间隔
    IHH101736 張二賀 2010-12-31 00:00:00.000 NULL
    IHH101736 張二賀 2011-07-01 00:00:00.000 182
    IHH101736 張二賀 2013-01-01 00:00:00.000 550
    IHH101741 艾維平 2011-01-01 00:00:00.000 NULL
    IHH102052 吳細波 2010-12-01 00:00:00.000 NULL
    IHH102052 吳細波 2011-01-01 00:00:00.000 31*/
      

  6.   


    DECLARE @i TABLE(num INT IDENTITY(1,1),工号 nvarchar(18),姓名 nvarchar(6),时间 DATETIME)  --借助表变量INSERT INTO @i(工号,姓名,时间)
    SELECT 工号,姓名,时间 FROM dbo.TBSELECT A.工号,A.姓名,A.时间,DATEDIFF(dd,B.时间,A.时间) AS 时间间隔
    FROM @i A
    left JOIN @i B ON A.工号 = B.工号 AND A.num = b.num + 1/*
    工号 姓名 时间 时间间隔
    IHH101736 張二賀 2010-12-31 00:00:00.000 NULL
    IHH101736 張二賀 2011-07-01 00:00:00.000 182
    IHH101736 張二賀 2013-01-01 00:00:00.000 550
    IHH101741 艾維平 2011-01-01 00:00:00.000 NULL
    IHH102052 吳細波 2010-12-01 00:00:00.000 NULL
    IHH102052 吳細波 2011-01-01 00:00:00.000 31*/
    能不能不添加变量啊,表不是我的,我只有查询权限
      

  7.   


    DECLARE @i TABLE(num INT IDENTITY(1,1),工号 nvarchar(18),姓名 nvarchar(6),时间 DATETIME)  --借助表变量INSERT INTO @i(工号,姓名,时间)
    SELECT 工号,姓名,时间 FROM dbo.TBSELECT A.工号,A.姓名,A.时间,DATEDIFF(dd,B.时间,A.时间) AS 时间间隔
    FROM @i A
    left JOIN @i B ON A.工号 = B.工号 AND A.num = b.num + 1/*
    工号 姓名 时间 时间间隔
    IHH101736 張二賀 2010-12-31 00:00:00.000 NULL
    IHH101736 張二賀 2011-07-01 00:00:00.000 182
    IHH101736 張二賀 2013-01-01 00:00:00.000 550
    IHH101741 艾維平 2011-01-01 00:00:00.000 NULL
    IHH102052 吳細波 2010-12-01 00:00:00.000 NULL
    IHH102052 吳細波 2011-01-01 00:00:00.000 31*/
    能不能不添加变量啊,表不是我的,我只有查询权限SELECT  A.工号 ,
            A.姓名 ,
            A.时间 ,
            DATEDIFF(dd, B.时间, A.时间) AS 时间间隔
    FROM    dbo.TB A
            LEFT JOIN TB B ON b.时间 = ( SELECT TOP 1
                                                时间
                                       FROM     TB t
                                       WHERE    A.工号 = t.工号
                                                AND A.时间 > t.时间
                                       ORDER BY t.时间 DESC
                                     )