我有一个 SQL 表,其中包含机器开始和结束时间 (DateTime) 的条目以及机器运行的持续时间。给定开始日期时间和结束日期时间,我想计算机器运行的持续时间。 DB 是 SQL,代码是 C#。
注意:当机器没有在给定的开始和结束日期时间之间运行时,可能会有一些持续时间,我想在总计算过程中忽略该持续时间。
考虑例子
启动时间机器 | 结束时光机 | 持续时间(分钟) |
---|---|---|
1:00:01 | 2:00:00 | - 60 |
2:00:01 | 2:30:00 | - 30 |
3:00:01 | 4:00:00 | - 60 |
如果选择的开始时间是 1:40:00,结束时间是 3:20:00(注意机器没有在 2:30:00 到 3:00 运行) >
如何在 SQL 中获取持续时间?
对于上面的例子,答案应该是 70 分钟。
1:40:00 to 2:30:00 - 50Mins
3:00:00 to 3:20:00 - 20Mins
Total = 70mins between 1:40:00 and 3:20:00
答案 0 :(得分:1)
这里是你怎么做的,我在 sql server 中写的(假设你在微软生态系统中)但你可以在任何其他 dbms 中做同样的事情)
select sum(datediff(minute, case when startdate <@startdate then @startdate else startdate end,case when enddate < @enddate then enddate else @enddate end))
from cte
where @startdate <= enddate and @enddate >= startdate
db<>fiddle here
在 postgresql 中你可以这样做:
select extract( epoch from sum(case when enddate < enddatevar then enddate else enddatevar end - case when startdate <startdatevar then startdatevar else startdate end)) /60
from cte
where startdatevar <= enddate and enddatevar >= startdate
答案 1 :(得分:0)
在 SQL 中你可以:
SELECT SUM(DATEDIFF(MINUTE, EndTime,StartTime)) FROM table_name
或者,在 C# 中,假设您获得具有 StartTime
和 EndTime
属性的对象集合:
var duration = results.Sum(x => x.EndTime.Subtract(x.StartTime).TotalMinutes);