Vraag T-SQL die de gemiddelde tijd berekent


Ik heb een probleem met het berekenen van de gemiddelde tijd. Dit is het geval: ik heb meerdere rijen, in elke rij zijn er gegevens in tijdformaat dus ik moet een gemiddelde tijd van alle rijen berekenen en het vermenigvuldigen met het aantal rijen, maar ik heb natuurlijk een probleem met het gegevensformaat omdat ik de tijd met een geheel getal moet vermenigvuldigen

Kan iemand me helpen met wat advies? thnx Hier zijn enkele gegevens:

times
00:00:00.7400000
00:00:01.1870000
00:00:00.6430000
00:00:00.6100000
00:00:12.9570000
00:00:01.1000000
00:00:00.7400000
00:00:00.5300000
00:00:00.6330000
00:00:01.6000000
00:00:02.6200000
00:00:01.0300000
00:00:01.9630000
00:00:00.9800000
00:00:01.0170000
00:00:00.7600000
00:00:00.7130000
00:00:00.9730000
00:00:01.0000000
00:00:01.0530000
00:00:02.9400000
00:00:00.8200000
00:00:00.8400000
00:00:01.1800000
00:01:25.8230000
00:00:01.0000000
00:00:00.9700000
00:00:01.2930000
00:00:01.3270000
00:00:13.5570000
00:00:19.3170000
00:00:58.2730000
00:00:01.6870000
00:00:18.7570000
00:00:42.8570000
00:01:12.3770000
00:00:01.2170000
00:00:09.9470000
00:00:01.4730000
00:00:00.9030000
00:00:01.0070000
00:00:01.1100000
00:00:01.6270000
00:00:05.0570000
00:00:00.6570000
00:00:00.7900000
00:00:03.2930000
00:00:00.8600000
00:00:01.0330000
00:00:00.9300000
00:00:00.8730000
00:00:00.9600000
00:00:00.8070000
NULL

dus van deze gegevens een gemiddelde tijd van de behoefte of / en som van die gegevens


10
2018-03-11 22:02


oorsprong


antwoorden:


Je kunt dit doen door een aantal datumberekeningen te doen:

DECLARE @t TABLE(x TIME);

INSERT @t VALUES('00:01:30'),('00:02:25'),('00:03:25');

SELECT CONVERT(TIME, DATEADD(SECOND, AVG(DATEDIFF(SECOND, 0, x)), 0)) FROM @t;

Echter, wat jij moeten doen is niet gebruiken TIME om een ​​interval / duur op te slaan. TIME is bedoeld om een ​​punt in de tijd op te slaan (en breekt af als u bijvoorbeeld meer dan 24 uur moet opslaan). In plaats daarvan moet u die begin- en eindtijden voor een evenement opslaan. Je kunt altijd de duur (en de gemiddelde duur) berekenen als je de twee eindpunten hebt.


10
2018-03-11 22:18



U zou iets moeten kunnen gebruiken dat lijkt op het volgende:

select 
  cast(cast(avg(cast(CAST(times as datetime) as float)) as datetime) as time) AvgTime,
  cast(cast(sum(cast(CAST(times as datetime) as float)) as datetime) as time) TotalTime
from yourtable;

Zien SQL Fiddle met demo.

Hiermee converteert u de times gegevens naar a datetime, dan een float dus je kunt de avg/sum, dan converteer je de waarde terug naar a datetime en tot slot een time


9
2018-03-11 22:18



Ervan uitgaande dat u de tijdsduur in een tijdveld hebt opgeslagen, kunt u de Datediff-functie zoals hieronder proberen om de som van de duur (of totale tijd) te krijgen. Gebruik eenvoudigweg Avg voor gemiddeld.

demo: http://sqlfiddle.com/#!3/f8c09/2

select sum(datediff(millisecond,0,mytime)) TotalTime
from t

0
2018-03-11 22:30



Dit kan handig zijn in deze en soortgelijke scenario's.

Hieronder wordt de datum / tijd omgezet naar een aantal minuten sinds middernacht. Met andere woorden tijd uitgedrukt als een geheel getal. Je kunt daar een gemiddelde van doen en vervolgens terug converteren naar de tijd.

declare @dt datetime = GETDATE();
select DATEDIFF(minute, dateadd(dd, datediff(dd, 0, @dt), 0), @dt);
--DATEDIFF(minute, [date without time i.e. midnight], [date/time of interest])

0
2018-06-03 22:26