MySQL:使用 4 周偏移量计算 4 周平均值

标签 mysql sql database

这个问题与我之前发的帖子有关:MySQL: Calculating Data from Table with One Month Offset

但现在我需要构建一个过程来查询按周存储的联系人数据表。这是我正在使用的表格的简化示例:

+-----------------+------------+
| week_start_date |  contacts  |
+-----------------+------------+
|    2015-03-08   |     12     |
|    2015-03-01   |     20     |
|    2015-02-22   |      5     |
|    2015-02-15   |     17     |
|    2015-02-08   |      8     |
|    2015-02-01   |      2     |
|    2015-01-25   |     16     |
|    2015-01-18   |     10     |
|    2015-01-11   |      4     |
|       ...       |    ...     |
+-----------------+------------+

我需要弄清楚的是如何计算 4 周移动平均线,它还有 4 周的偏移量。例如,如果我想获得 2015 年 3 月 8 日这一周的平均联系人数,则为 1 月 18 日至 2 月 8 日的平均值。在上面的示例中,我的平均值为:(10 + 16 + 2 + 8 )/4 = 9。如果我想求出 2015 年 3 月 1 日这一周的平均值,那么使用上面的示例表可以得出 1 月 11 日到 2 月 1 日的平均值,结果为 8。

从我的上一篇文章中,我知道我可以通过在 week_start_date 将表与其自身连接来处理 4 周偏移,类似于此:

SELECT s1.week_start_date, s2.Total_Contacts
  FROM sample_table s1
       LEFT JOIN (SELECT week_start_date, sum(contacts) AS Total_Contacts
                    FROM sample_table
                  GROUP BY week_start_date) s2
          ON s1.week_start_date =
                date_add(s2.week_start_date, INTERVAL 4 WEEK)
 WHERE s1.week_start_date = '2015-03-08'
GROUP BY s1.week_start_date;

但让它也计算四个星期的平均值是我遇到的困难。我认为在一系列日期加入它会奏效,但我一直得到比预期大得多的平均值。我猜这是由于 week_start_date 的分组方式所致。 (请注意,每周可以有多条记录。我在示例表上每周只显示一条记录,以使其不那么困惑。)

在某个日期范围内加入是正确的方法吗?或者我需要在某处添加另一个连接吗?

感谢您的帮助。

最佳答案

我建议使用相关子查询:

select st.*,
       (select avg(contacts)
        from sample_table st2
        where st2.week_start_date >= st.week_start_date - interval 7 * 7 days and
              st2.week_start_date <= st.week_start_date - interval 4 * 7 days
       ) as avg_4week_delayed
from sample_table st;

关于MySQL:使用 4 周偏移量计算 4 周平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29174153/

相关文章:

mysql - 获取前几年同一天的信息

php - 如何在 php 中使用 mysqldump 命令?

sql - 有没有办法在多个azure sql数据库中编写由azure自动调整创建的所有索引的脚本?

mysql - 如何使用 Terraform 管理数据库服务器

java - 创建记录导致 org.hibernate.MappingException : Unknown entity

sql - 每个客户有选择地覆盖主数据的数据库结构

mysql - 优化删除查询

mysql - Wordpress 超慢服务器响应 11GB Wordpress 数据库

SQL:将变量值与多个列匹配并选择匹配的列名

MySQL 在 Select .. In 语句中排序