2005-07-01 05:30:00.000 启动       1号泵     
2005-07-01 05:35:00.000 启动       2号泵     
2005-07-01 05:42:00.000 停止       1号泵     
2005-07-01 05:50:00.000 启动       3号泵     
2005-07-01 06:10:00.000 停止       3号泵     
2005-07-01 06:25:00.000 启动       1号泵     
2005-07-01 07:30:00.000 停止       2号泵     
2005-07-01 08:50:00.000 启动       3号泵    
....
....
....
请问如何能统计出单台泵每月的累计运行时间,请尽量详细些,谢谢! 

解决方案 »

  1.   

    n号泵的累积运行时间=n号泵的累积运行时间+n号泵的最近停止时间-n号泵的最近开始时间如此而已
      

  2.   

    以下语句pro是泵号,zt是状态,rq是日期:select t.pro,mit =x-y 
    from
      (select pro,sum(dadediff(minute, rq, getdate())) as x 
         from tb where zt=1 and convert(char(7),rq,120)='2005-07'
         group by pro) as t,
        (select pro,sum(datediff(minute, rq, getdate())) as y 
         from tb where zt=2 and convert(char(7),rq,120)='2005-07'
         group by pro)as s
    where t.pro=s.pro不是最好的语句,不过应该可以到达你的目的
      

  3.   

    To:WallesCai(加班费超过工资,唉,是快乐还是不幸呢) n号泵的累积运行时间你怎么去取呢
    to:vbman2003(家人) ,应该是停止时间减去运行时间,然后求和吧?sum(dadediff(minute, rq, getdate())) 这个是什么意思
      

  4.   

    我是用了当前时间为基准计算。
    dadediff(minute, rq, getdate()):当前日期与开始(关闭)日期之间的时间差,按分(minute)计算
      

  5.   

    用case更好:
    select pro,
          sum(case zt when 1 then DATEDIFF(minute, rq, GETDATE()) end)
          - sum(case zt when 2 then DATEDIFF(minute, rq, GETDATE()) end) as mit
    from tb
    where convert(char(7),rq,120)='2005-07'
    group by pro
      

  6.   

    to:vbman2003(家人):要是一个月的数据都这么去做,会不会有问题啊,我这只不过是一天某段时间的啊?
    累计时间取出后怎么能让他固定在表的最后一行显示呢
      

  7.   

    应该有更好的算法,不过这个算法就结果而言,我想没什么问题吧。我感觉你现在这样存放数据,计算起来有点难度,个认认为用两个字段分别记录起始和关闭时间比较好。时间段统计可以用between设定时间范围。
    要固定在显示表的最后一行有许多方法,要看你用什么控件,显示哪些内容等等。
      

  8.   

    to:vbman2003(家人):用的是vsflexgrid,显示每台泵每月的累计运行时间,让合计固定显示在表的最后一行,怎么去做?谢谢