【问题标题】:Find time difference between start status and end status with pause status使用暂停状态查找开始状态和结束状态之间的时间差
【发布时间】:2015-11-30 11:19:46
【问题描述】:

我在一个表中有一组记录,该表包含problemid, starttime, endtime, status。

  • 如果问题开始,则状态变为He010
  • 如果问题结束则状态变为He006
  • 如果问题已暂停,则状态为Hs014
  • 如果没有找到暂停,那么我很容易得到starttime和endtime之间的总时间

像这样:

declare @StartDate datetime, @EndDate datetime

select @StartDate = '2015-11-02 17:17:38.000',@EndDate='2015-11-02 17:17:49.000'

select convert(varchar(5),DateDiff(s, @startDate, @EndDate)/3600) +':'+
       convert(varchar(5),DateDiff(s, @startDate, @EndDate)%3600/60) +':'+
       convert(varchar(5),(DateDiff(s, @startDate, @EndDate)%60)) as [hh:mm:ss]

但我不知道是否存在暂停。

如果出现暂停,我想这样做,

Start + Pause then
pause + complete = total time

我该怎么做, 建议我寻求解决方案。

【问题讨论】:

  • 样本数据 + 预期结果集。
  • 您到底想做什么? If pause is present I want to do like this, Start + Pause then pause + complete = total time是什么意思
  • 我想计算那个问题ID的总时间
  • 看起来第二行是开始。这是否意味着它处于该状态3小时?当您要计算总时间时,是否意味着您要计算问题ID处于He010,He006和Hs014状态的时间??
  • 是的,第二行开始,第三行暂停,然后第四行开始,第五行完成,所以 15:35:10 + 0:0:14

标签: sql asp.net sql-server vb.net


【解决方案1】:

如果您想获取用户参加测试的总时间(HE010 开始和结束时间之间的差异总和,因为不需要其他事件来计算),那么您可以简单地执行以下操作:

SELECT SUM(DATEDIFF(SECOND, StartTime, FinishTime))
FROM tbl33997393
WHERE ProblemID = 'P1234' 
GROUP BY ProblemID

【讨论】:

    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多