Oracle - 计算时间戳大小超过1小时的时间戳

时间:2012-10-12 14:33:27

标签: oracle

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

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”子查询来使逻辑工作,但无法使其工作。有人会有任何他们可以提供的例子吗?谢谢! :)

1 个答案:

答案 0 :(得分:1)

这会得到你想要的吗?应始终对特定代理人在故障单上的第一个条目进行计数,之后的条目只应在距离之前的条目至少一个小时后才计算。

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

我不确定这正是你想要的 - 如果代理人在前一个条目的一小时内不断添加条目,除了第一个条目之外,它们都不会被计算在内。所以添加了大量更新的人会受到惩罚。

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

select agent_name, ticket_number, count(distinct to_char(timestamp,'DD-MON-YYYY HH24')
  from worklog
  group by agent_name, ticket_number