我想计算最近X分钟内出现的不同目录号码的数量。这通常称为滚动时间窗口。
例如,如果我有:
row startime orderNumber catalogNumb
1 2007-09-24-15.50 o1 21
2 2007-09-24-15.51 o2 21
3 2007-09-24-15.52 o2 21
4 2007-09-24-15.53 o3 21
5 2007-09-24-15.54 o4 22
6 2007-09-24-15.55 o4 23
7 2007-09-24-15.56 o4 21
8 2007-09-24-15.57 o4 21
例如,如果我想在最后5分钟得到这个(5只是其中一个可能的值),输出应为:
row startime orderNumber catalogNumb countCatalog
1 2007-09-24-15.50 o1 21 1
2 2007-09-24-15.51 o2 22 2
3 2007-09-24-15.52 o2 23 3
4 2007-09-24-15.53 o3 24 4
5 2007-09-24-15.54 o4 21 4
6 2007-09-24-15.55 o4 21 4
7 2007-09-24-15.56 o4 21 4
8 2007-09-24-15.57 o4 21 3
我正在使用Big SQL for infosphere BigInsights v3.0。 结果查询可以使用任何db2 Olap窗口函数,除了 count(distinct catalogNumb)我的db2版本不支持OVER()...
除了count之外,我还可能需要在catalogNumb和其他属性上使用其他聚合函数(avg,sum ...)。
任何反馈都将不胜感激。
答案 0 :(得分:0)
True Db2不支持count distinct作为OLAP函数,但有一个简单的解决方法:
您可以使用
DENSE_RANK
相反 - 来自密集等级的最高数字(最大)是你的数量不同!
答案 1 :(得分:0)
您可以尝试这样的事情:
select ...
from mytable
where starttime between current_time - 5 minutes and current_time
这将获得最后5分钟的所有行。 5
可以是变量。然后是count()或sum()或average()行。