Я пытаюсь запустить запрос в таблице базы данных в MySQL. Я пытаюсь вычислить максимальное среднее значение ватт в течение периода времени подряд. Так, например, у меня есть таблица (изображение предоставлено), и я хочу запросить таблицу, чтобы найти наибольшие средние ватты в течение 60 последовательных секунд, которые существуют в таблице для определенного человека. Я прикрепляю изображение таблицы, чтобы вы могли видеть структуру данных. Большое спасибо заранее за любую помощь, которую вы можете предложить.
Вот то, что я пробовал, но не могу понять последовательную часть времени.
select max(avg_watts)
from
(
SELECT AVG(watts) avg_watts FROM tblworkoutdata GROUP BY personid
) tmp
Это не так просто, как кажется. Скажем, у вас есть эти данные:
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
Но почему какое правило находит эти диапазоны? Я бы использовал следующий алгоритм:
затем
Запрос:
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
если вам это нравится.
(Легко получить этот результат на человека. Просто укажите идентификатор человека повсюду и соберите его результаты.)
Вам нужно будет присоединиться к таблице данных для себя, используя любой столбец, содержащий дату. Что-то вроде:
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
)
personid