如何通过写sql存储过程计算第一个的结束时间和第二个的开始时间(数据量很大)

在时间表里通过存储过程实现第一个的结束时间和第二个的开始时间,不是第一条数据的开始和结束时间。是第一个和第二个之间差。满意悬赏500

第1个回答  2013-08-13
先做个不受那么多限制的,这个ID不用是必须步长为1的可以中间有缺少的。呵呵是这个意思吗?
select *,DATEDIFF(day,结束时间,下条的开始时间) as 时间差 from
(select *
,(select top 1 开始时间 from test z where z.ID>a.ID order by ID) as 下条的开始时间
from test a
)b
第2个回答  2013-08-13
sql源码如下:(虽然功能已经实现,但是有一个弊端,就是id必须是一组等差数列,并且步长必须为1)
select id,starttime as '开始时间',endtime as '结束时间' from test;
select t.id,t.endtime as '第n行结束时间',t1.starttime as '第n+1行开始时间',DATEDIFF(day,t.endtime,t1.starttime) as '时间差'from test t inner join
(select * from test where id not in (select top 1 id from test)) t1
on t1.id-1=t.id

结果显示如图:
第3个回答  2013-08-12
要学会问问题,你说的不是很清楚,让别人无法回答,可能问题只有你自己清楚,你能举个例子说明一下你的问题吗?本回答被网友采纳
第4个回答  2013-08-13
把时间表的表结构放上来看看嘛!

如何通过写sql存储过程计算第一个的结束时间和第二个的开始时间(数据量...
select *,DATEDIFF(day,结束时间,下条的开始时间) as 时间差 from (select ,(select top 1 开始时间 from test z where z.ID>a.ID order by ID) as 下条的开始时间 from test a )b

sql如何取某年某月的第一天和最后一天
下下月第一天:SELECT dateadd(ms,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+2, 0)) as mouthlastdate

如何在一条SQL中对比日期间隔并计算总数
用几个临时表存储分段时间同时设置一个计数器。如果在8.1-8.11的临时表里出现过。计数器+1 同时存储到临时空间里。然后把这些计算好的数据拼接成你需要的报表

oracle中如何得到执行存储过程的开始和结束时间
需要在存储过程中定义的时候把开始执行时间和结束时间打印出来。举例如下:创建存储过程:create or replace procedure p_testasv_begintime varchar2(20);v_endtime varchar2(20);v_str varchar2(10);begin v_begintime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'); select 'badkano' into...

SQL日期计算
convert(varchar(10),DATEADD(wk, DATEDIFF(wk,0,dateadd(wk,24,'2009-01-01')), 6),120) 结束日期 上面求第25个周起止时间,求第20周把24改成19即可。补充解释一下:1:dateadd(week,24,'2009-01-01')是在'2009-01-01'的基础上加上24周,算上'2009-01-01'所在的周正好是25周,...

SQL 怎么实现第一行数据减去第二行数据?
你这里应该有个时间列吧代表先后。那么这里边起码涉及四个列 time,in,out,remain 你可以这样试试:select [time],in,out,remain=(select sum(in)-sum(out) from table1 t1 where [t1.time<=t2.time]) from table1 t2 大概是这个意思,我没有环境,可能语法有点出入,但思路可以这么想 ...

如何解决执行sql存储过程(大数据量复杂的sql计算操作)时,不影响用户使 ...
两个办法:一个是做一个数据库复制,可以半天复制一次,也可以一天复制一次(闲时复制),根据用户对数据的敏感度决定,存储过程运行不限时间,运行时访问复制数据库,不影响主数据库。需要额外资源:数据库服务器,数据库复制时间和网络资源开销;第二个是定制成任务,闲时执行结果放到指定表中,或者直接以...

SQL语句实现一段时间内的每一个日期的列表
create procedure p_date @begindate datetime,@enddate datetime as begin declare @diff int,@i int select @i=0 select @diff=datediff(day,@begindate,@enddate)create table #temp (dt datetime primary key(dt))while @i<=@diff begin insert into #temp values (dateadd(day,@i,@begin...

SQL存储过程中怎么写循环
1、第一步,编写存储过程的整体结构,定义变量,见下图,转到下面的步骤。2、第二步,完成上述步骤后,定义游标,具体的代码见下图,转到下面的步骤。3、第三步,完成上述步骤后,编写一个for循环,游标for循环开始,然后临时返回变量名,从任意一个开始,使用变量名.列名,最后循环的游标结束,见下图,...

存储过程第一次执行耗时30分钟,第二次开始每次耗时不到3分钟,这是什么...
sql是高级语言,数据库系统执行sql之前要将sql语句进行解析(相当于编译),这个过程叫硬解析;数据库系统每次执行sql之前都会检查共享池中是不是存在已经解析过的语句,如果有就拿来直接用,这叫软结息。软解析比硬解析效率高,这是影响因素之一;二、第一次执行可能没有走索引,第二次执行使用第一次...

相似回答