mysql - 按新近度将动量计算为加权平均值

标签 mysql weighted-average trend

我有一个订阅表,其中包含关联的 feed_id 和创建时间戳。一个提要有 N 个订阅。

使用 group 查询来计算每个 feed_id 的记录数就可以很容易地显示最受欢迎的提要。但我想计算动量以显示大多数趋势提要。

一个简化的算法是:

momentum of feed_id =
    10 * (count of subscriptions with created_at in past day)
  + 5 *  (count of subscriptions with created_at from 2-7 days ago)
  + 1 *  (count of subscriptions with created_at from 7-28 days ago)

如何在单个 (My)SQL 查询中完成类似的事情,而不是使用 3 个查询并以编程方式对结果求和?

最佳答案

您可以为此使用条件聚合。 MySQL 将 bool 值视为整数,true 为“1”,因此您可以只对时间表达式求和。

我猜它看起来像这样:

select feedid,
       (10 * sum(createdat >= date_sub(now(), interval 1 day)) +
         5 * sum(createdat >= date_sub(now(), interval 7 day) and
                 createdat < date_sub(now(), interval 1 day)) +
         1 * sum(createdat >= date_sub(now(), interval 28 day) and
                 createdat < date_sub(now(), interval 7 day))
       ) as momentum
from subscriptions
group by feedid

关于mysql - 按新近度将动量计算为加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060536/

相关文章:

python - 算法过程缓慢

python - 使用 numpy.average 的加权平均值

php - 警告 : mysql_error(): supplied argument is not a valid MySQL-Link resource

javascript - FullCalendar 事件定向到错误的 url

javascript - 如何在考勤管理系统的数据库中保存当前、缺勤的学生名单?

algorithm - 根据事件、总里程和总时间标准化锻炼

machine-learning - 具有季节性的时间序列分析。有这样的统计/机器学习java库可用吗?

r - 基于增加/减少趋势的子集向量

twitter - Twitter 热点话题提取

mysql - Drupal 7 中 MySQL 转储导入时出现 AWS S3 错误