2

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

worklog_id,
agent_name,
ticket_number,
timestamp,
worklog_notes.  

我希望能够计算工作日志条目的数量,如果agent_name,ticket_numbertimestamp(date) 相同,则仅当两个条目之间的时间大于 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”子查询使逻辑工作,但无法使其工作。有人可以提供任何示例吗?谢谢!:)

4

1 回答 1

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
于 2012-10-12T14:47:52.397 回答