2016-11-19 47 views
0

我有一个插入呼叫数据的表。现在我想要计算picktime和呼叫的关闭时间想要添加从现有列计算得出的新列

Create table calldata 
(
    calldate Datetime, 
    picktime datetime, 
    status varchar(50) 
) 

insert into calldata 
values('2016-11-18 04:43:37 PM','2016-11-18 04:43:57 PM','ATTENDED') 

insert into calldata 
values('2016-11-18 04:43:37 PM','2016-11-18 04:44:25 PM','ESCALATED') 

insert into calldata 
values('2016-11-18 04:43:37 PM','2016-11-18 04:49:52 PM','ESCALATED') 

insert into calldata 
values('2016-11-18 04:43:37 PM','2016-11-18 04:50:20 PM','CLOSED') 

select * from calldata 

输出:

calldate    | picktime     | status 
-------------------------------------------------------------- 
2016-11-18 16:43:37.000 | 2016-11-18 16:43:57.000 | ATTENDED 
2016-11-18 16:43:37.000 | 2016-11-18 16:44:25.000 | ESCALATED 
2016-11-18 16:43:37.000 | 2016-11-18 16:49:52.000 | ESCALATED 
2016-11-18 16:43:37.000 | 2016-11-18 16:50:20.000 | CLOSED 

现在我想这样的数据,从上面的表格:

calldate    | picktime     | CloseTime    | status 
------------------------------------------------------------------------------------------- 
2016-11-18 16:43:37.000 | 2016-11-18 16:43:57.000 | 2016-11-18 16:44:25.000 | ATTENDED 
2016-11-18 16:43:37.000 | 2016-11-18 16:44:25.000 | 2016-11-18 16:49:52.00 | ESCALATED 
2016-11-18 16:43:37.000 | 2016-11-18 16:49:52.000 | 2016-11-18 16:50:20.00 | CLOSED 
2016-11-18 16:43:37.000 | 2016-11-18 16:50:20.000 |       | CLOSED 
+0

你确定你想要的CLOSE_TIME作为下一个呼叫的picktime? –

+0

不适用于下一次呼叫,希望close_time来自同一个特定移动电话的呼叫否 – mansi

+0

此数据仅适用于一个号码。我想同样为不同的移动号码 – mansi

回答

3

这样的事情?

LEAD(picktime, 1, null) OVER (PARTITION BY calldate ORDER BY picktime)? 

它得到相同的calldate的下一个pictime。

0
Begin Tran 

Create table calldata (calldate Datetime,picktime datetime,status varchar(50)) 

insert into calldata values('2016-11-18 04:43:37 PM','2016-11-18 04:43:57 PM','ATTENDED') 
insert into calldata values('2016-11-18 04:43:37 PM','2016-11-18 04:44:25 PM','ESCALATED') 
insert into calldata values('2016-11-18 04:43:37 PM','2016-11-18 04:49:52 PM','ESCALATED') 
insert into calldata values('2016-11-18 04:43:37 PM','2016-11-18 04:50:20 PM','CLOSED') 


select calldate,picktime,LEAD(picktime,1) OVER (ORDER BY picktime)as CloseTime,status from calldata 
RollBack Tran 
0

随着子查询是活的轻松:

select *, 
    (
    select top 1 d.picktime from calldata d 
    where d.picktime > c.picktime 
    order by d.picktime asc) previous_picktime 
from calldata c 

这QRY做同样的工作LEAD排名函数(但我prefere使用subqry由于铅不上以前的版本存在(例如2008 MSSQL R2)。

如果你想添加列是要加入到这一观点最好的方式。