我有一个包含以下字段的工作日志表:
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”子查询来使逻辑工作,但无法使其工作。有人会有任何他们可以提供的例子吗?谢谢! :)
答案 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