【问题标题】:MYSQL - Correct way to get average from top 5 of 7 days?MYSQL - 从 7 天中的前 5 天获得平均值的正确方法?
【发布时间】:2018-04-22 05:41:35
【问题描述】:

我正在跟踪每天的步数。我想使用 7 天期间中最好的 5 天来获得平均步数/天。一旦我得到一个有效的查询,我将对活动时间做同样的事情。我的最终目标是在总共 16 周内,在 7 天中获得最佳 5 天的平均值。

Here is my sqlfiddle

这是我目前得到的查询(encodedid 是分配给每个用户的唯一 ID):

SELECT AVG(activities.steps) AS AVGSteps, (SUM(activities.lightly_act_min)+SUM(activities.fairly_act_min)+SUM(activities.vact_min)) AS AVGActiveMin FROM activities, faculty WHERE  
activities.activitydate BETWEEN
DATE_ADD(faculty.startsemester, INTERVAL 0 DAY)  AND 
DATE_ADD(faculty.startsemester, INTERVAL 7 day) 
GROUP BY activities.encodedid
ORDER BY `activities`.`steps`

它正确返回了所有 7 天的平均值,但我不知道如何返回这 7 天中最好的 5 天的平均值。

任何帮助将不胜感激。

谢谢,

提姆

【问题讨论】:

    标签: mysql date average


    【解决方案1】:

    您需要基本上将现有查询用作子查询,以便您可以从 7 天中选择最好的 5 天(我认为是最高的 5 天),然后取平均值。请注意,BETWEEN 包含在内,因此您的结束日期应该是开始日期 + 6 天,而不是 +7)。

    SELECT AVG(a.steps) AS AVGSteps, SUM(a.lightly_act_min)+SUM(a.fairly_act_min)+SUM(a.vact_min) AS AVGActiveMin 
    FROM (SELECT * FROM activities
          JOIN faculty
          WHERE activities.activitydate BETWEEN
              DATE_ADD(faculty.startsemester, INTERVAL 0 DAY)  AND 
              DATE_ADD(faculty.startsemester, INTERVAL 6 DAY) 
          ORDER BY activities.steps DESC
          LIMIT 5) a
    GROUP BY a.encodedid
    

    【讨论】:

    • 我使用查询获得了 7 天中最好的 5 天的活动分钟数,但输出不正确。这是我尝试过的代码: SELECT AVG(SUMActiveMin) AS AVGActiveMin FROM (SELECT *, SUM(activities.lightly_act_min)+SUM(activities.fairly_act_min)+SUM(activities.vact_min) AS SUMActiveMin FROM 活动 JOIN Courses WHERE 活动。 activitydate BETWEEN DATE_ADD(Courses.Startsemester, INTERVAL 0 DAY) AND DATE_ADD(Courses.Startsemester, INTERVAL 6 DAY) ORDER BY SUMActiveMin DESC LIMIT 5 ) a GROUP BY a.encodedid 它输出所有 7 天的总分钟数,而不是 5 天。 ?
    • 嗨,蒂姆,您在子查询中使用了 GROUPing 函数,这不起作用,我认为没有必要。尝试将SUM(activities.lightly_act_min)+SUM(activities.fairly_act_min)+SUM(activities.vact_min) AS SUMActiveMin 更改为activities.lightly_act_min+activities.fairly_act_min+activities.vact_min AS SUMActiveMin
    • 太棒了!这给了我想要的结果。再次感谢!!!!
    • 不用担心,很高兴我能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2021-06-04
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多