滚动时间窗口的明显计数

时间:2018-01-28 04:02:56

标签: sql count db2 sliding-window

我想计算最近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 ...)。

任何反馈都将不胜感激。

2 个答案:

答案 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()行。