3 votes

Calculer la différence de temps en minutes dans SQL Server 2008

J'ai une table dans le serveur SQL 2008 avec des données. La table contient des données sur la durée pendant laquelle l'organisation a travaillé sur la demande.

CREATE TABLE support 
(    ID varchar(50), 
     IN_ORGANIZATION varchar(MAX),    
     FROM_ORGANIZATION varchar(MAX),
     TIMEDIF datetime                );

INSERT INTO support
(ID, IN_ORGANIZATION,FROM_ORGANIZATION,TIMEDIF )

VALUES
('22907','ORGANIZATION_NAME_1','RODLAY LLP','2017-04-15 14:58:00.000'),

('22907','MARY LOAN','ORGANIZATION_NAME_1','2017-04-15 15:00:00.000'),

('23289','VENIXTON Ltd','ORGANIZATION_NAME_1','2017-04-21 11:00:00.000'),

('23289','ORGANIZATION_NAME_1','Ocean Loan','2017-04-21 12:00:00.000'),

('23289','Ocean Loan','ORGANIZATION_NAME_1','2017-04-21 13:00:00.000')

;

Je veux trouver des organisations de travail à temps avec la demande : NOM_DE_L'ORGANISATION_1. Aidez-moi à écrire un CURSEUR pour calculer le temps.

Result:
ID, TIMEDIF(minutes)
22907, 2
23289, 120

0voto

DhruvJoshi Points 11715

Peut-être cette question vous aidera-t-elle :

select 
   id, 
   DATEDIFF(m,MIN(TIMEDIF),MAX(TIMEDIF)) as [TIMEDIF(minutes)] 
from support
    where IN_ORGANIZATION ='ORGANIZATION_NAME_1' 
       or FROM_ORGANIZATION ='ORGANIZATION_NAME_1'
group by id

0voto

djangojazz Points 4115

Si vous essayez simplement d'obtenir arbitrairement les TimeDifferences entre les lignes, vous pouvez essayer quelque chose comme ceci :

; WITH x AS
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY id) AS rwn
From dbo.support
)
SELECT 
  x.ID
, y.ID AS NextID
, x.IN_ORGANIZATION
, y.IN_ORGANIZATION NextInOrg
, x.FROM_ORGANIZATION
, y.FROM_ORGANIZATION NextFromOrg
, x.TIMEDIF
, y.TIMEDIF AS NextTimeDiff
, x.rwn
, DATEDIFF(MINUTE, x.TIMEDIF, y.TIMEDIF) AS DifferenceFromOneToTheNext
FROM x 
    INNER JOIN x y ON x.rwn = y.rwn - 1

Si vous mettez une identité qui s'auto-sème, vous pouvez déjà obtenir un pointeur pour la référence. C'est vraiment arbitraire.

0voto

G.Arima Points 1101

Datediff fera l'affaire

select id,datediff(minute,min(timedif),max(timedif) ) AS time from support 
where in_organization = 'ORGANIZATION_NAME_1' or from_organization = 'ORGANIZATION_NAME_1'  
group by id ;    

Ma production :

    |id     |time
1   |22907  |2
2   |23289  |120

N'hésitez pas à me contacter si vous avez des questions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X