Предложение SQL для кумулятивного счета и графана - PullRequest
0 голосов
/ 05 июня 2019

У меня есть база данных PostgreSQL, подключенная к приборной панели Grafana. Я хотел бы сделать кумулятивный подсчет и показать его на графике, но я не нашел способа достичь этого. Конкретно мой стол выглядит так:

project_name / project_namespace / project_creation_date
Project A / Namespace A / 2019-05-22
Project B / Namespace B / 2019-05-23
Project A2 / Namespace A / 2019-05-23
Project C / Namespace C / 2019-05-23
Project D / Namespace D / 2019-05-24
Project B2 / Namespace B / 2019-05-24

То, что я хотел бы показать на своем графике, для каждой даты - количество существующих пространств имен. На 22 мая есть одно пространство имен (A), на 23 мая - два новых пространства имен (B и C), а на 24 мая - новое (D). Таким образом, совокупная эволюция пространств имен такова:

2019-05-22 Number of namespaces: 1 (A)
2019-05-23 Number of namespaces: 3 (A, that already existed, and new B and C)
2019-05-24 Number of namespaces: 4 (A, B and C, that already existed, and D)

Таким образом, график должен отмечать 1 на 22-м, 3 на 23-м и 4 на 24-м. Как я могу добиться этого с помощью предложения SQL в Grafana?

Очень благодарен за вашу помощь,

Привет.

1 Ответ

0 голосов
/ 05 июня 2019

Идея состоит в том, чтобы получить первую дату для каждого name_space.В Postgres вы можете выразить это как:

select project_creation_date, count(*) as day_count,
       sum(count(*)) over (order by project_creation_date) as cumulative_count
from (select distinct on (project_namespace) project_namespace project_creation_date
      from t
      order by project_namespace, project_creation_date
     ) t
group by project_creation_date
order by project_creation_date;

Ниже приведен эквивалент (и стандартный SQL), но он может работать не так хорошо:

select project_creation_date, count(*) as day_count,
       sum(count(*)) over (order by project_creation_date) as cumulative_count
from (select project_namespace, min(project_creation_date) as project_creation_date
      from t
      order by project_namespace, project_creation_date
     ) t
group by project_creation_date
order by project_creation_date;
...