在SQL Server 2008中计算时间差(分钟)

3

我在SQL Server 2008中有一个包含数据的表格。 该表格记录了组织机构为某项请求工作的时间。

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')

;

我希望能够找到一些与请求ORGANIZATION_NAME_1有关的工作组织。请帮我编写CURSOR来计算时间。

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

1
我不明白你是如何得出预期输出的。我认为应该是120分钟,而不是180分钟,但无论如何请澄清一下。另外,如果您以代码格式添加每行开头的4个空格,以表格的形式显示数据会很有帮助。 - Tim Biegeleisen
2
TIMEDIF的逻辑是什么?你是如何确定值的?而且你不想为这种类型的事情使用游标。 - Sean Lange
3个回答

0

也许这个查询可以帮助你:

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

1
不良习惯:在日期/时间操作中使用速记法 - Aaron Bertrand - SqlZim

0
如果您只是随意尝试获取行之间的时间差异,可以尝试以下方法:
; 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

如果您输入一个自我种子的标识符,您已经可以获得一个指针以供参考。不过这真的很随意。


0

Datediff函数可以解决问题。

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 ;    

我的输出:

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

如有任何疑问,请告知。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接