Member 11615785 Ответов: 1

Как рассчитать общее время, затраченное на SQL-запрос


Я хочу рассчитать общее время, затраченное на вождение, исключая время, затраченное на паузу и возобновление.

Примерные значения приведены ниже.:

LocationTrackingId PatientRequestId	NurseId	LocationDateTime	Status<br />
          1	           22	                     4	17-06-2019 14:10	StopDriving<br />
          2	           22	                     4	17-06-2019 14:10	Driving<br />
          3	           22	                     4	17-06-2019 14:09	Driving<br />
          4	           22	                     4	17-06-2019 14:09	ResumeDriving<br />
          5	           22	                     4	17-06-2019 14:09	PauseDriving<br />
          6	           22	                     4	17-06-2019 14:08	Driving<br />
          7	           22	                     4	17-06-2019 14:07	Driving<br />
          8	           22	                     4	17-06-2019 14:06	Resumeriving<br />
          9	           22	                     4	17-06-2019 13:05	PauseDriving<br />
          10	           22	                     4	17-06-2019 13:04	Driving<br />
          11	           22	                     4	17-06-2019 13:03	Driving<br />
          12	           22	                     4	17-06-2019 13:02	StartDriving<br />
</blockquote>


Что я уже пробовал:

convert(varchar(5),DateDiff(s, pr.DrivingStartTime, pr.DrivingStopTime)/86400)+' Days '+convert(varchar(5),DateDiff(s, pr.DrivingStartTime, pr.DrivingStopTime)% 86400/3600)+':'+convert(varchar(5),DateDiff(s, pr.DrivingStartTime, pr.DrivingStopTime)%3600/60)+':'+convert(varchar(5),(DateDiff(s, pr.DrivingStartTime, pr.DrivingStopTime)%60)) AS TotalTravelTime  

OriginalGriff

Запрос, который вы показываете, не имеет никакого отношения к данным, которые вы дали: мы не можем решить из двух несопоставимых элементов, в чем заключается проблема, с которой вы столкнулись ... Я подозреваю, что есть промежуточный шаг, который вы нам не дали.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

1 Ответов

Рейтинг:
2

#realJSOP

Попробуйте это (может потребоваться настройка)...

;WITH cte AS
(
    SELECT PatientRequestID, 
           MIN(LocationDateTime) AS StartTime, 
           MAX(LocationDateTime) AS EndTime, 
           DateDiff(second, MIN(LocationDateTime), MAX(LocationDateTime)) AS TotalSeconds
    FROM   dbo.MyTable
    GROUP  BY PatientRequestID
)
SELECT PatientRequestID, 
       StartTime, 
       EndTime, 
       TotalSeconds / 3600 AS Hours, 
       (TotalSeconds % 3600) / 60 AS Minutes, 
       TotalSeconds % 60 as Seconds,
       RIGHT('00', CAST(TotalSeconds / 3600 AS VARCHAR)+':'+
         RIGHT('00', CAST((TotalSeconds % 3600) / 60 AS VARCHAR)+':'+
         RIGHT('00', CAST(TotalSeconds % 60 AS VARCHAR) AS TotalTravelTime
FROM   CTE;