首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用最近的加权平均值计算动量

用最近的加权平均值计算动量
EN

Stack Overflow用户
提问于 2015-03-15 12:21:11
回答 2查看 428关注 0票数 0

我有一个带有关联feed_id和创建时间戳的订阅表。提要有N个订阅。

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

一个简化的算法是:

代码语言:javascript
运行
复制
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)

如何在单个(我的)SQL查询中完成这样的操作,而不是使用3个查询并以编程方式总结结果?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-15 12:26:19

可以为此使用条件聚合。MySQL将布尔值视为整数,其真值为"1",因此您可以将表达式与时间相加。

我猜是这样的:

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2015-03-15 12:32:51

代码语言:javascript
运行
复制
SELECT 10*COUNT(IF(created_at >= CURDATE(), 1, 0)) +
       5*COUNT(IF(created_at BETWEEN DATE_ADD(CURDATE(), - INTERVAL 7 days) AND DATE_ADD(CURDATE(), - INTERVAL 1 day), 1, 0) +
       1*COUNT(IF(created_at BETWEEN DATE_ADD(CURDATE(), - INTERVAL 28 days) AND DATE_ADD(CURDATE(), - INTERVAL 8 day), 1, 0)
FROM ...

我不是百分之百肯定我已经抓住边缘条件(昨天或8天前),以准确地得到正确的计数。你会想要测试的。

如果您对24小时周期感兴趣,那么只需将NOW()替换为CURDATE(),那么一切都会转到约会时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29060536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档