Если вы можете использовать базу данных для расчета этих значений, вы можете использовать оконную функцию LAG , чтобы получить значение из предыдущей строки. Однако в базах данных нет очевидной предыдущей строки, потому что порядок строк не определен. Таким образом, чтобы получить значение предыдущего ряда, вы должны определить порядок. Это цель ORDER BY в предложении OVER . Я буду считать, что ваш заказ от StartTime. В этом случае вы можете использовать такой код:
declare @Table table(NID int, DgAcs char(1), CustAgentFl int, AgentId int, StartTime datetime, EndTime datetime, TransferFlag int, Desired int)
insert into @Table values
(4565, 'C', 1, 358746, '2018-09-08 17:02:37', '2018-09-08 17:04:31', 1, 0),
(4565, 'C', 1, 358714, '2018-09-08 17:04:48', '2018-09-08 17:08:17', 1, 17),
(4565, 'C', 1, 359548, '2018-09-08 17:07:07', '2018-09-08 17:13:41', 1, 0),
(4565, 'C', 1, 358749, '2018-09-08 17:13:54', '2018-09-08 17:21:09', 1, 13),
(4565, 'A', 1, 351897, '2018-09-08 17:19:09', '2018-09-08 17:20:36', 0, 0),
(4565, 'C', 1, 358896, '2018-09-08 17:21:08', '2018-09-08 17:26:00', 0, 0)
; with cte as (
select
*
, LAG(EndTime, 1) over(order by StartTime) as PrevEndTime
, DATEDIFF(s, LAG(EndTime, 1) over(order by StartTime), StartTime) as SecondsSinceLastEndNullable
, ISNULL(DATEDIFF(s, LAG(EndTime, 1) over(order by StartTime), StartTime), 0) as SecondsSinceLastEnd
from @Table
)
select
*
, iif(SecondsSinceLastEnd <= 0, '00:00:00', concat(SecondsSinceLastEnd / 3600, ':', FORMAT((SecondsSinceLastEnd / 60) % 60, 'D2'), ':', FORMAT(SecondsSinceLastEnd % 60, 'D2')))
, iif(SecondsSinceLastEnd <= 0, '00:00:00', CONVERT(varchar, DATEADD(s, SecondsSinceLastEnd, 0), 108))
from cte
Вы отформатировали желаемый результат как время, но учтите, что разница между двумя моментами времени не является точным временем. Это может быть более 24 часов. Я показал вам два способа преобразования разницы в количестве секунд в нужный формат. Второй использует CONVERT, чтобы получить значение ВРЕМЕНИ, но, как я уже сказал, это не будет работать для промежутков, превышающих 24 часа. Первый способ даст вам продолжительность в формате H: MM: SS, где H - количество часов, которое может быть больше 23.
В Power BI вы можете написать это как пользовательский запрос .