本帖最后由 simon_wdming 于 2013-11-13 17:55:20 编辑

解决方案 »

  1.   

    比如上面的Id=22的这个存储过程跑了20分钟.怎么计算出,id为22的记录的存储过程跑了20分钟呢,有EndDateTime,但是从什么时间开始运行的呢
      

  2.   

    把上一行的endtime作为下一行的starttime,然后两个值相减
      

  3.   


    --是的,可以用上一个存储过程跑完成的的时间EndDateTime 减去下个存储过程跑完的时间EndDateTime.如果大于10分钟就报出来.然后再去对这个长时间的存储过程作性能分析.因为这个表的记录有200多万条这样的记录.
    每天后台程序批量跑很多存储过程来对不同的表merger(插入/删除/更新).每执行完一个存储过程都会写Log日志到这个表里面(Id是自动增加的).
    有时候某个存储过程执行特慢,要纠出来分析.
      

  4.   

    建议你在这个表的基础上加一个字段结束时间EndTime,开始执行存储过程前插入日志,执行存储完成update后这条日志的EndTime,这样一比较两个时间就得到分钟数了.假如你已经加了EndTime字段,那么:select *
    from tbLog
    where datediff(Minute,StartTime,EndTime)>=10
      

  5.   

    try this,select b.*
     from [表名] a
     left join [表名] b on a.Id=b.Id+1
     where datediff(mi,b.EndDateTime,a.EndDateTime)>=10
      

  6.   

    上面的正确
    select b.*
     from [表名] a
     left join [表名] b on a.Id=b.Id+1
     where datediff(mi,b.EndDateTime,a.EndDateTime)>=10
      

  7.   

    上面写的是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