sql-server - SQL Server:在表中某个值后使用函数
问题描述
我试图找到存储的对话中两个特定点之间的时间差。这些观点在每次对话中都可能不同,这对我来说很困难。我需要代理的消息和它之后的第一个 EndUser 响应之间的时间差。
在下面的 CaseNr 1234 示例中,我需要 MessageNrs 3&4、5&6 和 7&8 之间的时间差。在 CaseNr 2345 中,我需要 MessageNrs 3&4、5&6、7&8 和 10&11 之间的时间差。在 CaseNr 4567 中,我需要 2&3 和 4&5 之间的时间差。
如图所示,Agent 和 EndUser 的顺序在每个对话中以及这些类型的位置可能不同。
有没有办法按照我在 SQL Server 中描述的方式计算时差?
解决方案
我认为这段代码应该对你有所帮助。
with t(MessageNr,CaseNr,Type, AgentTime, EndUserTime) as
(
select
t1.MessageNr,
t1.CaseNr,
t1.Type,
t1.EntryTime,
(select top 1 t2.EntryTime
from [Your_Table] as t2
where t1.CaseNr = t2.CaseNr
and t2.[Type] = 'EndUser'
and t1.EntryTime < t2.EntryTime
order by t2.EntryTime) as userTime
from [Your_Table] as t1
where t1.[Type] = 'Agent'
)
select t.*, DATEDIFF(second, AgentTime, EndUserTime)
from t;
推荐阅读
- google-app-engine - Google App Engine 实例的 IP 会以特定的时间间隔自动更改
- docker-swarm - docker 容器从一个节点切换到另一个节点而不会耗尽或重新启动节点
- html - 如何围绕圆圈创建文本(五分之一圈)
- android - 如何在回收器视图中为 RadioButton 添加动作事件?
- css - 带CSS的标题和副标题的领导者
- php - 如何输入回显值完成查询?
- c - 你能以编程方式检测C中函数的字节大小吗
- hyperledger-fabric - 我们可以修改超级账本作曲家中的交易记录吗
- spring-boot - 使用 MINA 2 为 Spring 配置 Camel
- wordpress - 如何在联系表 7 中使文件上传为“必需”?