计算持续时间SQL的总和

时间:2020-08-05 13:30:27

标签: sql ms-access

我使用以下sql来计算第一个查询的持续时间。

CDate(TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0))) AS Duration

并获得以下不错的enter image description here

现在,我想在另一个查询中进一步计算一周内不同课程的总时间。像sum(iif(lesson =“ math”,duration,0))

但是既然是时候了,数据类型sql server不允许我使用sum函数。

我尝试了以下sql。

sum(hour(duration) + minute(duration)) AS Total_time

但这不是我期望的,因为我希望保留一些标准的原始格式。

是否有一种整洁的方法?谢谢。

2 个答案:

答案 0 :(得分:1)

我建议只接受以秒或十进制小时为单位的总时间:

select datediff("s", starttime, endtime) as diff_seconds,
       datediff("s", starttime, endtime) / (60 * 60.0) as diff_hours
   

答案 1 :(得分:1)

首先,只需获取数字持续时间:

TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0) AS Duration

这可以求和并转换为DateTime:

CDate(Sum([duration])) AS Total_time

示例

数据:

Data

查询:

SELECT 
    StartTime, 
    EndTime, 
    TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0) AS Duration
FROM 
    tTest;
SELECT 
    Count(*) AS Slots, 
    CDate(Sum([Duration])) AS TotalHours
FROM 
    qTest;

结果:

Result