一段时间的最大平均值

问题描述 投票:0回答:2

我试图在MySQL中的数据库表上运行查询。我试图找出连续秒的一段时间内瓦特的最大平均值。因此,例如,我有一个表(提供的图片),我想查询表,找到特定人员表中存在的60个连续秒的最大平均瓦数。我附上了表格的图片,以便您可以看到数据结构。非常感谢您提供的任何帮助。

这是我试过的,但无法弄清楚连续的时间片。

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

screenshot of db table

mysql sql
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. 从这些avarages采取最大的

查询:

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;

即使:z zxswい

你当然可以将子查询从http://rextester.com/OZT99379子句移到SELECT子句中,如果你更喜欢这样的话。

(每个人都很容易得到这个结果。只需在任何地方都包含人员ID,然后将结果分组。)


-1
投票

您需要使用包含日期时间的任何列将数据表连接到自身。就像是:

FROM
© www.soinside.com 2019 - 2024. All rights reserved.