Рассчитать сумму длительности SQL - PullRequest
0 голосов
/ 05 августа 2020

Я использую следующие 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

And now, I would like to further calculate the total time of different lessons within a week in another query. Something like sum(iif(lesson="math",duration,0))

But since it's time data type sql server doesn't let me use the sum function.

I tried the following sql.

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

Но это не то, что я ожидал, потому что я хотел бы сохранить исходный формат с некоторыми критериями.

Есть удобный способ сделать это? Спасибо.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Сначала просто получите число c продолжительность:

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

Queries:

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;

Результат:

Результат

1 голос
/ 05 августа 2020

Я бы рекомендовал просто принять общее время в секундах или десятичных часах:

select datediff("s", starttime, endtime) as diff_seconds,
       datediff("s", starttime, endtime) / (60 * 60.0) as diff_hours
   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...