有一个表,其中记录了来自系统各个模块的数据。
条目如下所示:
ModuleId | DateTime | OperationId
1 2020-03-15 21:00 4
1 2020-03-15 21:03 5
2 2020-03-15 21:04 2
3 2020-03-15 21:05 4
2 2020-03-15 21:07 5
3 2020-03-15 21:32 3
如何找到一个moduleid在15分钟的时间间隔内生成的、但具有不同operationid的记录数?
结果:
TotalRecords | SatisfyingEntries
6 2
例子
1 | 21:15 | 1 this
1 | 21:17 | 3 and this is 1 interval
1 | 21:32 | 2 falls into the interval with the second record
3条答案
按热度按时间lvmkulzt1#
总条目是简单的分组结果,这里没有技巧。对于你的问题的另一部分,类似于下一个的方法可能会起作用(没有针对边界条件进行测试):
dldeef672#
我相信这就是你想要的:
您可以通过添加另一个条件来删除组('='或'in()',但是如果您只需要一个moduleid,我强烈建议使用'=')
sysdate可以是max的另一个子查询,因此您将获得特定moduleid的第一条记录的时间
myss37ts3#
如果总数据集不是很大,可以使用一个简单的相关子查询。
但是,如果这个数据集大于几千行,您可能需要查看我上面建议的奇怪的更新。尽管他们做的事情略有不同。
请注意,此查询计算的是事件发生后的15分钟,因此它不是真正的滚动15分钟窗口。这是一个完全不同的问题,古怪的更新应该处理。
还要注意,这个查询显示了对这个表的良好索引的需要。
最后一点注意:如果“totalrecords”总是所有记录的计数,那么最好在另一个查询中得到它,这取决于您计划如何使用这些数据。