建议你在这个表的基础上加一个字段结束时间EndTime,开始执行存储过程前插入日志,执行存储完成update后这条日志的EndTime,这样一比较两个时间就得到分钟数了.假如你已经加了EndTime字段,那么:select * from tbLog where datediff(Minute,StartTime,EndTime)>=10
try this,select b.* from [表名] a left join [表名] b on a.Id=b.Id+1 where datediff(mi,b.EndDateTime,a.EndDateTime)>=10
上面的正确 select b.* from [表名] a left join [表名] b on a.Id=b.Id+1 where datediff(mi,b.EndDateTime,a.EndDateTime)>=10
上面写的是join的,这里写一个子查询的: --t1是后一条记录,而t2是前一条记录 select * from ( select t1.*, (select DATEDIFF(MINUTE,t2.EndDateTime,t1.EndDateTime) from tb t2 where t1.ID = t2.ID+1) as cost_minutes from tb t1 )t where cost_minutes>= 10
--是的,可以用上一个存储过程跑完成的的时间EndDateTime 减去下个存储过程跑完的时间EndDateTime.如果大于10分钟就报出来.然后再去对这个长时间的存储过程作性能分析.因为这个表的记录有200多万条这样的记录.
每天后台程序批量跑很多存储过程来对不同的表merger(插入/删除/更新).每执行完一个存储过程都会写Log日志到这个表里面(Id是自动增加的).
有时候某个存储过程执行特慢,要纠出来分析.
from tbLog
where datediff(Minute,StartTime,EndTime)>=10
from [表名] a
left join [表名] b on a.Id=b.Id+1
where datediff(mi,b.EndDateTime,a.EndDateTime)>=10
select b.*
from [表名] a
left join [表名] b on a.Id=b.Id+1
where datediff(mi,b.EndDateTime,a.EndDateTime)>=10
--t1是后一条记录,而t2是前一条记录
select *
from
(
select t1.*,
(select DATEDIFF(MINUTE,t2.EndDateTime,t1.EndDateTime)
from tb t2 where t1.ID = t2.ID+1) as cost_minutes
from tb t1
)t
where cost_minutes>= 10