Jeer
@Jeer
уверенный пользователь

Как составить sql запрос?

Всем привет,
Есть таблица, в которой хранится статистика api запросов
time
query
userId

Необходимо получить максимальное одномоментное кол-во пользователей программы.
Интересует самый топорный вариант с любым грубейшим приближением.
Запросов немного, пользователей еще меньше.
То есть, некие пиковые значения по нагрузке.

Чисто теоретически, я бы мог выгрузить все данные и скормить какому-то графику, но это делать долго. А вот просто на sql даже представить не могу, как это можно сделать
  • Вопрос задан
  • 68 просмотров
Решения вопроса 2
@alexalexes
Самый топорный вариант - "округляем" время до интересуемого интервала (кванта времени) функцией форматированного вывода времени и считаем кол-во записей с группировкой по форматированному значению времени, потом сортируем в нужную сторону.
Данный пример использует функцию to_char СУБД Oracle и интервал квантования - 1 минута.
select * from
(
  select to_char(time, 'YYYY.MM.DD HH24:MI') time_round_minute, count(distinct userId) cnt
  from log_table
  group by to_char(time, 'YYYY.MM.DD HH24:MI') 
 )
order by cnt desc

Если отсортировать по форматированную времени, при условии, что формат времени записан в порядке убывания величин (год, месяц, день, час, минута, секунда), то выходные данные - практически готовая гистограмма нагрузки.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
На MySQL 8.0 с оконными функциями будет примерно так:
SELECT `time` AS `start`, `time` + INTERVAL 1 MINUTE AS `end`, 
  COUNT(*) OVER (
    ORDER BY `time`
    RANGE BETWEEN INTERVAL 0 MINUTE PRECEDING AND INTERVAL 1 MINUTE FOLLOWING
  )
  FROM `test`;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы