我有一个包含以下字段的工作日志表:
worklog_id,
agent_name,
ticket_number,
timestamp,
worklog_notes.
我希望能够计算工作日志条目的数量,如果agent_name
、ticket_number
和timestamp
(日期)相同,则仅当两个条目之间的时间大于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“子查询来使逻辑工作,但无法使其工作。谁有什么可以提供的例子?谢谢!:)
发布于 2012-10-12 22:47:52
这个得到你想要的了吗?给定座席在工单上的第一个条目应始终计数,之后的条目仅在距离前一个条目至少一个小时后才应计数。
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
https://stackoverflow.com/questions/12861303
复制相似问题