【问题标题】:Calculating a 7 day average计算 7 天平均值
【发布时间】:2020-09-15 20:17:00
【问题描述】:

我有这个问题。

CREATE TABLE ip_logs (
  `ip_address` VARCHAR(11),
  `start_date` VARCHAR(11),
  `end_date` VARCHAR(11),
  `time_stamp`, VARCHAR(20),
  `mappings`, INTEGER,
  `loc_id` INTEGER
);

INSERT INTO ip_logs
  (`ip_address`,`start_date`,`end_date`,`time_stamp`,`mappings`, `loc_id`)
VALUES
 ('120.2.53.21','2020-01-03','2020-01-09','2020-01-03 14:33','2', '5'),
 ('198.3.222.2','2020-01-03','2020-01-14','2020-01-03 7:53', '7','4'),
 ('108.4.213.3','2020-01-04','2020-01-07','2020-01-04 12:13','3', '4'),
 ('128.5.173.4','2020-01-07','2020-02-15','2020-01-07 8:29', '12','3'),
 ('110.6.432.5','2020-01-07','2020-03-01','2020-01-07 11:45','4', '2'),
 ('198.7.222.6','2020-01-10','2020-01-14', '2020-01-10 17:32','8', '1'),
 ('118.8.113.7','2020-01-10','2020-01-19','2020-01-10 20:52','10', '4'),
 ('106.1.212.9','2020-02-24','2020-03-30','2020-02-24 10:08','5', '1'); 

我想生成映射列的 7 天平均值。例如,我想计算每天(从 2020-01-03 - 2020-01-10)的平均映射。

结果:

 time_stamp | avg_mapping
 2020-01-03 | 4.5 (2 + 7) /2
 2020-01-04 | 3
 2020-01-07 | 8 (12 +4)/2
 2020-01-10 | 9 

然后返回 avg(avg_mapping)

【问题讨论】:

  • 请向我们展示您想要的样本数据结果。
  • @GMB 我刚刚更新了它。谢谢

标签: mysql sql count average moving-average


【解决方案1】:

我不明白您的问题与滚动平均值有何关系。从您的数据和结果来看,您似乎只想要聚合和avg()

select date(time_stamp) as time_stamp_day, avg(mapping) as avg_mapping
from ip_logs
group by date(time_stamp)

如果您想要结果集中列avg_mapping 的平均值(这与mapping 的整体平均值不同),那么您可以添加另一个级别的聚合:

select avg(avg_mapping) as avg_avg_mapping
from (
    select avg(mapping) as avg_mapping
    from ip_logs
    group by date(time_stamp)
) l

【讨论】:

  • 谢谢...抱歉没有很好地提出问题。我猜我对什么是运行平均值有误解。
  • @user3078335:没问题。在我看来,你的问题还不错。您以create tableinsert 语句的形式提供了示例数据,这是SQL 问题的最佳实践。你只是错过了想要的结果。下一次,你也应该展示你自己解决问题的尝试(即使查询出错或产生错误的结果)。
猜你喜欢
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多