Отличный отсчет по скользящему временному окну

Я хочу посчитать количество отдельных каталожных номеров, появившихся за последние 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 для инфосферы BigInsights v3.0. В результирующем запросе могут использоваться любые функции окон Olap для db2, за исключением count (отдельного catalogNumb) OVER()..., который не поддерживается моей версией db2.

Помимо подсчета, мне также может понадобиться использовать другие агрегатные функции (avg, sum...) для catalogNumb и других атрибутов.

Любая обратная связь будет оценена.

2 ответа

Вы можете попробовать что-то вроде этого:

select ...
  from mytable
  where starttime between current_time - 5 minutes and current_time

Это получит все строки за последние 5 минут. 5 может быть переменной. затем count() или sum() или middle() строк.

True Db2 не поддерживает подсчет, отличный от функции OLAP, но существует простой обходной путь:

Ты можешь использовать

DENSE_RANK

вместо этого - наибольшее число (макс.) из плотного ранга - ваш счет различен!

Другие вопросы по тегам