Максимальное среднее значение за период времени

0

Я пытаюсь запустить запрос в таблице базы данных в MySQL. Я пытаюсь вычислить максимальное среднее значение ватт в течение периода времени подряд. Так, например, у меня есть таблица (изображение предоставлено), и я хочу запросить таблицу, чтобы найти наибольшие средние ватты в течение 60 последовательных секунд, которые существуют в таблице для определенного человека. Я прикрепляю изображение таблицы, чтобы вы могли видеть структуру данных. Большое спасибо заранее за любую помощь, которую вы можете предложить.

Вот то, что я пробовал, но не могу понять последовательную часть времени.

select max(avg_watts)
from 
(
  SELECT AVG(watts) avg_watts FROM tblworkoutdata GROUP BY personid
) tmp

скриншот таблицы db

Теги:

2 ответа

0
Лучший ответ

Это не так просто, как кажется. Скажем, у вас есть эти данные:

minute   watts
1        100
59       200
60       300
70       300
80       500
120      100

Это дает следующие 60 диапазонов минут:

minute   avg watts
1-60     150
59-80    325
70-120   300

Но почему какое правило находит эти диапазоны? Я бы использовал следующий алгоритм:

  1. Для каждой минуты в таблице найдите максимальную минуту в том же диапазоне (1-> 60, 59-> 80, 60-> 80, 70-> 120, 80-> 120, 120-> 120).
  2. Из этих пар берется минимальная начальная минута за минуту (1 <-59, 59 <-80, 70 <-120)

затем

  1. Для каждого из этих диапазонов найдите средние ватты
  2. Из этих разрешений взять максимум

Запрос:

select max(avg_watts)
from
(
  select
    (
      select avg(watts)
      from tblworkoutdata data 
      where data.time between groups.t1 and groups.t2
    ) as avg_watts
  from
  (
    select min(t1) as t1, t2
    from
    (
      select
        time as t1,
        (
          select max(tbl2.time)
          from tblworkoutdata tbl2
          where tbl2.time between tbl1.time and tbl1.time + 59
        ) as t2
      from tblworkoutdata tbl1
    ) pairs
    group by t2
  ) groups
) averages;

Демо-версия реестров: http://rextester.com/OZT99379

Конечно, вы можете перемещать подзапросы из предложений SELECT предложения FROM если вам это нравится.

(Легко получить этот результат на человека. Просто укажите идентификатор человека повсюду и соберите его результаты.)

  • 0
    Спасибо, завтра попробую и если получится, обновлю соответственно. Спасибо за терпеливость. Я ценю ваше время.
-1

Вам нужно будет присоединиться к таблице данных для себя, используя любой столбец, содержащий дату. Что-то вроде:

SELECT MAX(avg_watts) FROM (
    SELECT i.date_time,
           AVG(i2.watts) AS avg_watts
    FROM tblworkoutdata i
    JOIN tblworkoutdata i2
         ON  i2.date_time >= i.date_time 
         AND i2.date_time <  DATE_ADD(i.date_time, INTERVAL 1 MINUTE)
    GROUP BY i.date_time 
)
  • 0
    Этот запрос не группируется по personid
  • 0
    @IVOGELOV Это пример того, как вы можете получить скользящее среднее за определенный период времени. Я не знаю специфику модели данных этого парня.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню