在MySQL中计算随时间增加或减少的趋势

在MySQL中计算随时间增加或减少的趋势,mysql,trending,Mysql,Trending,我有一个具有以下结构的表存储: store_visits: store_name: string visit_count: integer visit_date: date 我的目标是创建一个查询,对于每个商店和给定的日期范围,该查询将计算: 当前使用AVGvisit_计数的日期范围内的平均访问次数 商店访问量是增加还是减少 相对增加/减少率为1至4级,其中1=低比率,4=高比率 访问量的相对增加/减少率仅用于定向目的。它将始终是一个线性比例 我花了一天的时间试图构造MySQL查询来实现

我有一个具有以下结构的表存储:

store_visits:
 store_name: string
 visit_count: integer
 visit_date: date
我的目标是创建一个查询,对于每个商店和给定的日期范围,该查询将计算:

当前使用AVGvisit_计数的日期范围内的平均访问次数 商店访问量是增加还是减少 相对增加/减少率为1至4级,其中1=低比率,4=高比率 访问量的相对增加/减少率仅用于定向目的。它将始终是一个线性比例

我花了一天的时间试图构造MySQL查询来实现这一点,但我还是无法理解

任何帮助都将不胜感激

谢谢,
-Scott

假设您只想比较日期范围前半部分和后半部分的店铺访问量,下面是一个跨越过去40天的示例,使用2个子查询获取每个范围的计数

select 
  ((endVisits + startVisits)/40) average, 
  (endVisits > startVisits) increasing, 
  ((endVisits - startVisits)/(startVisits) * 100) percentChange 
from 
  (select sum(visit_count) startVisits 
    from store_visit 
    where 
      visit_date > current_date - 40 
      and visit_date <= current_date - 20) startRange,
  (select sum(visit_count) endVisits 
    from store_visit 
    where  
      visit_date > current_date - 20) endRange;
注释

我不知道你想怎么计算你的1-4增长额,所以我只是把它作为一个百分比,你可以根据你想要的逻辑修改它。此外,还需要根据需要更新子查询中的日期范围


编辑:刚刚将平均值更新为endVisits+startVisits/40,而不是endVisits+startVisits/2。您还可以在子查询中使用avg函数,将这些查询的总和除以2,得到整个期间的平均值

@navigator48我刚意识到如果没有开始访问,你将被零除。我试过了,在这种情况下你会得到null,所以我只是想给你一个关于这种情况的提示,这样你就可以避免null指针异常。谢谢你的这个例子-它几乎完全符合我想要做的。@navigator48-很高兴我能帮上忙: