求一个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
工号 姓名 时间
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
解决方案 »
- 去掉SQL SERVER 2005 的连接提示
- 视图能够像普通表一样进行数据库的插入,更新,删除操作吗?还是只能进行查询操作?
- 帮忙写一个SQL语句
- 请问各位大哥, 你们产品信息表一般怎么设计?
- 关于In操作符的一点疑问,还请各位帮我看看
- MSSQL触发器调用url链接
- 怎么像SQLServer里面加入图片记录?
- delete触发器的问题?
- 关于sql语句的简单问题
- 我把doc、jpeg、text等文件写入sql2000的image类型字段中,现在希望把它们从image中读出并生成一个文件,或者直接显示在网页上,用asp.net
- 关于MERGE,唯一索引问题,求解!
- 这个查询语句怎么写?谢谢!
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*/ --?
from
(
select 工号,姓名,时间,上次时间=(select top 1 时间 from tb b where a.工号=b.工号 and b.时间<a.时间 order by 时间 desc)
from tb a
)t
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*/
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*/
能不能不添加变量啊,表不是我的,我只有查询权限
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
)