0
我们只是改变了我们的电话系统,目前正通过15个分钟的间隔记录每一个代理商,我们需要每个事件1线总和间隔的可变量一起
表事件:
empid | code | timestamp | duration
5111 | 5 | 09:45:00 | 45
5222 | 2 | 09:58:00 | 120
5111 | 5 | 10:00:00 | 900
5111 | 5 | 10:15:00 | 900
5111 | 5 | 10:15:30 | 30
5222 | 5 | 11:00:00 | 8
5222 | 5 | 11:00:05 | 5
时间戳writen在事实之后,在9:45:00的时间戳,45的持续时间是从9:44:15开始的,因为时间间隔在9:45停止,它是在那时写的,但我需要9:44:15保存
结果应该给我
empid | code | timestamp | duration
5111 | 5 | 09:44:15 | 1875
5222 | 2 | 09:56:00 | 120
5222 | 5 | 10:59:52 | 13
问题是手机被锁定的最大延迟时间为2小时,正如你可以看到我的员工#5222他在两条线上花了13秒......我可以加入同一张桌子10次。 1,以避免当有地方前行的结束时间=新线
这是MSSQL 2008
Select e.empid
,e.code
,convert(time(0),DATEADD(ss,- e.Duration, e.timestamp))
,e.duration + isnull(e1.duration,0) + isnull(e2.duration,0)
from [event] e
left join [event] e0 on
convert(TIME(0),DATEADD(ss,- e.Duration, e.timestamp)) = e0.timestamp
and
e.empid = e0.empid
and
e.code = e0.code
left join [event] e1 on
convert(TIME(0),DATEADD(ss,- e1.Duration, e1.timestamp)) = e.timestamp
and
e.empid = e1.empid
and
e.code = e1.code
left join [event] e2 on
convert(TIME(0),DATEADD(ss,- e2.Duration, e2.timestamp)) = e1.timestamp
and
e2.empid = e1.empid
and
e2.code = e1.code
--etc......
where isnull(e0.duration,'-10') = '-10'
的开始时间这工作,但离最佳远远相同的代码...
我宁愿使用一个聚合函数,但我不知道如何编写它,因为除了上次时间戳与新的持续时间匹配之外,没有comon键 - 使用此表的持续时间!
重要的是要知道代理5111可以在同一天再次使用代码5,并且我将需要2行代码,如果不是这样会太简单!
谢谢你提前!
你好感谢你,逻辑上似乎罚款我了解它如何可以工作,是的,它是一个有趣的挑战,但确实在SQL Server 2008中我得到这个错误:“铅”是无法识别的内置在函数名中。 !我很有信心,当我尝试它:(是否有另一种选择?是的,我们很便宜,不升级到SQL服务器2016年!grrrr –
已更新为使用外部申请代替LEAD。我认为它现在应该在2008年 –
你是一个天才!!!!我会尝试一个更大的规模,但它似乎是我想要的,结果看起来很棒的测试样品!真棒!!!!!!!!谢谢谢谢谢谢! –