首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle -对时间戳之间的差异大于1小时的时间戳进行计数

Oracle -对时间戳之间的差异大于1小时的时间戳进行计数
EN

Stack Overflow用户
提问于 2012-10-12 22:33:27
回答 1查看 497关注 0票数 2

我有一个包含以下字段的工作日志表:

代码语言:javascript
运行
复制
worklog_id,
agent_name,
ticket_number,
timestamp,
worklog_notes.  

我希望能够计算工作日志条目的数量,如果agent_nameticket_numbertimestamp (日期)相同,则仅当两个条目之间的时间大于1小时时才计算工作日志条目。

例如: John Smith在票据12345上创建了三个工作日志条目。第一个时间戳为"10/11/2012 9:11:44 AM",第二个时间戳为"10/11/2012 9:36:16 AM“,第三个时间戳为"10/11/2012 11:18:20 AM”。在本例中,我只想给代理提供两个工作日志条目的积分,因为前两个条目的间隔不到一个小时。

我尝试过使用"where“子查询来使逻辑工作,但无法使其工作。谁有什么可以提供的例子?谢谢!:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-12 22:47:52

这个得到你想要的了吗?给定座席在工单上的第一个条目应始终计数,之后的条目仅在距离前一个条目至少一个小时后才应计数。

代码语言:javascript
运行
复制
select agent_name, ticket_number, count(*) from (
  select agent_name, ticket_number, timestamp,
         lag(timestamp) over
            (partition by agent_name, ticket_number order by timestamp) prev_timestamp
  )
from worklog
where (prev_timestamp is null
       or (timestamp - prev_timestamp) >= interval '1' hour
      )
group by agent_name, ticket_number

我不确定这是否正是您想要的--如果一个代理在前一个条目之后的一个小时内不断添加条目,那么除了第一个条目外,其他条目都不会被计算在内。因此,添加了大量更新的人会受到惩罚。

也许你真正想要的是计算更新的不同小时数:

代码语言:javascript
运行
复制
select agent_name, ticket_number, count(distinct to_char(timestamp,'DD-MON-YYYY HH24')
  from worklog
  group by agent_name, ticket_number
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12861303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档