java Oracle SQL计算并发事件数
我试图找出一种方法,可以识别表中的事件记录何时同时发生
例如,考虑在Oracle数据库中有一个名为^ {CD1>}的表::
|EVENT_UUID|HOST_NAME|START_TM|END_TM|
|1|host1|12-JUN-15 01.31.04.092000000 PM|12-JUN-15 01.55.58.716000000 PM|
|2|host2|15-JUN-15 10.02.45.494000000 AM|15-JUN-15 01.12.18.257000000 PM|
|3|host3|17-JUN-15 03.19.48.506000000 PM|17-JUN-15 03.51.59.874000000 PM|
|4|host4|18-JUN-15 09.24.36.602000000 PM|NULL|
|5|host5|18-JUN-15 12.32.43.109000000 PM|19-JUN-15 01.22.32.412000000 PM|
我知道我可以通过以下操作找到在给定日期范围内开始的所有事件:
SELECT *
FROM EVENTS
WHERE START_TM BETWEEN TO_DATE('2015-JUN-11', 'YYYY-MON-DD') AND TO_DATE('2015-JUN-13', 'YYYY-MON-DD');
但这只给了我在这个范围内开始的所有事件
最终,我希望能够运行报告并检查以下内容
- “一天内发生的并发事件数。”李>
- “一小时内发生的并发事件数。”李>
有人知道一种方法可以帮助我识别事件同时发生的时间吗
# 1 楼答案
使用类似于以下内容的谓词:
这将拾取在报告期结束之前开始和报告期开始之后结束的所有事件
它不会拾取在报告期开始之前结束或在报告期结束之后开始的事件
# 2 楼答案
我认为您需要将表连接到自身,并获取所有事件,其中包括2个事件:
测试数据
查询:
# 3 楼答案
您可以使用一种相对简单的技术来计算并发事件的数量:累积聚合。这个想法是计算启动和停止的次数。那么,累积数就是并发值的数目
这将为您提供数据中每次并发事件的数量(开始或结束时间)。然后,您可以使用
where
子句和order by
/fetch first
或聚合来提取一天或一小时的最大值