首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL,算时间间隔

2013-07-23 
求一个SQL,算时间间隔求一个SQL 工号姓名时间IHH101736張二賀2010-12-31 00:00:00IHH101736張二賀2011-07-

求一个SQL,算时间间隔
求一个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

[解决办法]

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.000NULL
IHH101736張二賀2011-07-01 00:00:00.000182
IHH101736張二賀2013-01-01 00:00:00.000550
IHH101741艾維平2011-01-01 00:00:00.000NULL


IHH102052吳細波2010-12-01 00:00:00.000NULL
IHH102052吳細波2011-01-01 00:00:00.00031*/

  --?
[解决办法]
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

热点排行