У меня есть дата alarms
со столбцами, два из которых: tmStartTime
и tmEndtime
.Я хочу рассчитать общее активное время tmTotals
в часах, это может быть более 24 часов.Так, например, 24:00:04
моя таблица данных Alarms
(здесь я использовал тип данных TIME
, который работал нормально для времен менее 24 часов):
tmStarttime tmEndTime tmTotals
--------------------------------------------------------------
2018-12-03 00:00:19.257 2018-12-04 00:00:23.288 00:00:04 (is actually 24:00:04)
2018-12-03 23:59:16.817 2018-12-04 00:01:42.942 00:02:26
2018-12-03 23:59:45.005 2018-12-04 00:07:03.650 00:07:18
2018-12-03 23:11:57.645 2018-12-04 00:07:16.785 00:55:19
2018-12-04 00:03:52.086 2018-12-04 00:07:37.991 00:03:45
2018-12-04 00:07:16.787 2018-12-04 00:08:14.302 00:00:57
2018-12-04 00:08:30.430 2018-12-04 00:08:34.480 00:00:04
со временем более 24часы, которые я нашел, я должен сделать:
UPDATE Messages_History
SET tmTotals
= right ('0' + convert(varchar(9),(sum(datediff(second,tmStartTime,tmEndTime)) / 3600 )),2) + ':'
+ right ('0' + convert(varchar(9),(sum(datediff(second,tmStartTime,tmEndTime)) / 60 ) % 60 ),2) + ':'
+ right ('0' + convert(varchar(9),(sum(datediff(second,tmStartTime,tmEndTime)) %60 )),2)
Здесь я получил ошибку:
An aggregate may not appear in the set list of an UPDATE statement.
Затем я нашел, что должен сделать:
WITH cte
AS (SELECT new_tmTotals
= right ('0' + convert(varchar(9),(sum(datediff(second,tmStartTime,tmEndTime)) / 3600 )),2) + ':'
+ right ('0' + convert(varchar(9),(sum(datediff(second,tmStartTime,tmEndTime)) / 60 ) % 60 ),2) + ':'
+ right ('0' + convert(varchar(9),(sum(datediff(second,tmStartTime,tmEndTime)) %60 )),2), tmTotals
FROM Messages_History
GROUP BY tmTotals)
UPDATE cte
SET tmTotals = new_tmTotals
При выполненииХранимая процедура Я получил сообщение об ошибке:
Cannot update the view or function 'cte' because it contains aggregates, or a DISTINCT or GROUP BY clause, or PIVOT or UNPIVOT operator.
Я немного растерян, что мне теперь нужно делать, я нашел кое-что об удалении дублирующихся строк, но мне нужно сохранить дубликаты.