J'ai une table dans SQL Server 2008 avec des données. Le tableau contient des données indiquant la durée pendant laquelle l'organisation a travaillé sur 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 souhaite rechercher des organisations de travail à temps avec la demande: ORGANIZATION_NAME_1. Aidez-moi à écrire CURSOR pour calculer le temps.

Result:
ID, TIMEDIF(minutes)
22907, 2
23289, 120
2
phil.brown 1 mai 2017 à 17:29

3 réponses

Meilleure réponse

La fonction 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 sortie:

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

Faites-le savoir en cas de questions.

0
G.Arima 1 mai 2017 à 15:44

Si vous essayez simplement d'obtenir les différences de temps 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 insérez une identité que vous créez, vous pouvez déjà obtenir un pointeur pour référence. C'est vraiment arbitraire.

0
djangojazz 1 mai 2017 à 15:29

Peut-être que cette requête vous aidera:

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
0
DhruvJoshi 1 mai 2017 à 14:52