2010-10-04 5 views
0

J'essaie d'obtenir le temps moyen qu'un pilote a terminé une livraison s'arrête à chaque client unique. J'utilise les colonnes suivantes:Temps moyen à partir de l'ensemble de données DateTime dans SQL Server 2005

Name (varchar(50)) 
Reference1 (varchar(50)) 
CompletedTime (Datetime). 

Je reçois une moyenne mais il inclut le temps la date & pas seulement la date. Ce qui rend le temps moy. Incorrect.

merci pour l'aide!

Code actuel ci-dessous:

select name, Reference1, CAST(AVG(CAST(CompletedTime AS float)) AS datetime) 
From tblOrderRouteStops 
where Name not like 'Cta%' and Reference1 <> '000000' and Name <> '' and CompletedTime is not Null 
Group By name, Reference1 

Data Set:

CASCADE HEMOPHILIA CONSORTIUM 000117 2010-10-01 09:24:01.000 
CASCADE HEMOPHILIA CONSORTIUM 000117 2010-09-29 09:30:23.000 
CASCADE HEMOPHILIA CONSORTIUM 000117 2010-09-27 09:44:17.000 
CASCADE HEMOPHILIA CONSORTIUM 000117 2010-09-24 09:36:49.000 
CASCADE HEMOPHILIA CONSORTIUM 000117 2010-09-23 09:48:20.000 
CASCADE HEMOPHILIA CONSORTIUM 000117 2010-09-22 09:21:20.000 
BOTSFORD OUT-PATIENT PHARMACY 006106 2010-09-23 08:01:06.000 
BOTSFORD OUT-PATIENT PHARMACY 006106 2010-09-22 08:02:42.000 
BOTSFORD OUT-PATIENT PHARMACY 006106 2010-09-24 08:21:36.000 
BOTSFORD OUT-PATIENT PHARMACY 006106 2010-09-27 08:24:49.000 
BOTSFORD OUT-PATIENT PHARMACY 006106 2010-09-28 08:25:58.000 
BOTSFORD GENERAL HOSPITAL PREM 006205 2010-10-04 07:33:13.000 
BOTSFORD GENERAL HOSPITAL PREM 006205 2010-10-01 07:35:13.000 
BOTSFORD GENERAL HOSPITAL PREM 006205 2010-09-30 07:31:15.000 
BOTSFORD GENERAL HOSPITAL PREM 006205 2010-09-29 07:41:56.000 
BOTSFORD GENERAL HOSPITAL PREM 006205 2010-09-28 08:03:38.000 

sortie souhaitée:

Name, Reference1, Time 
+0

Pouvez-vous publier, disons, 10 lignes de données d'échantillon? –

+0

de quelle sortie avez-vous besoin? – Thakur

+0

à la fois demandé ajouté à mon message. – user466118

Répondre

0

Ce wil travail pour vous

Vous pouvez vous débarrasser de l'dateby en utilisant la conversion (varchar, valeur 108

select name, Reference1, 
    CONVERT(varchar, CAST(AVG(CAST(CompletedTime AS float) - CAST(CompletedTime AS int)) AS datetime),108) averageTime 
     From tblOrderRouteStops 
     where Name not like 'Cta%' and Reference1 <> '000000' and Name <> '' and CompletedTime is not Null 
     Group By name, Reference1 
3

Vous L'approche float était un bon début: vous devez supprimer le nombre entier qui vous donne une fraction représentant l'heure du jour. En moyenne, retournez à datetime. Pour l'utiliser, ignorer le « 1 janvier 1900 » et prendre le peu de temps que votre moyenne

select name, Reference1, 
      CAST(AVG(CAST(CompletedTime AS float) - CAST(CompletedTime AS int)) AS datetime) 
From tblOrderRouteStops 
where Name not like 'Cta%' and Reference1 <> '000000' and Name <> '' and CompletedTime is not Null 
Group By name, Reference1 
+0

Je reçois "1900-01-01 08: 05: 41.000" comme le moy. un moyen de laisser tomber la date? – user466118

+0

@ user466118: désolé, non. c'est une valeur "datetime" donc vous aurez toujours un composant de date – gbn

+0

gbh merci ... j'ai pris ce que vous avez commencé et ajouté un converti pour obtenir seulement la partie temps. sélectionnez le nom, Convert (nvarchar, CAST (AVG (CAST (flotté CompletedTime AS) - CAST (CompletedTime AS int)) AS datetime), 108) – user466118

Questions connexes