首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中计算今天和昨天的差值?

如何在MySQL中计算今天和昨天的差值?
EN

Stack Overflow用户
提问于 2012-09-10 22:23:17
回答 2查看 303关注 0票数 0

请考虑下表:

代码语言:javascript
复制
id   _date          timestamp       views   change
--------------------------------------------------
1   2011-01-31  1296514800  550        0.00
1   2011-02-01  1296601200  504       -8.36
1   2011-02-02  1296687600  484       -3.97
2   2011-01-31  1296514800   50        0.00
2   2011-02-01  1296601200   40      -20.00
2   2011-02-02  1296687600   45       12.50
3   2011-01-31  1296514800  150        0.00
3   2011-02-01  1296601200  180       20.00
3   2011-02-02  1296687600  200       11.11

请注意,该表首先按id排序,然后按_date排序。我对每个id都有相同数量的_date

change列中,我想计算每个公司id昨天和今天的视图差异百分比。请注意,每当我们开始计算新公司id的%change时,第一行应该显示为0.00,因为我们没有可用来计算的昨天值。其他值简单地用folmula计算:

代码语言:javascript
复制
todays_value - yesterdays_value          504 - 550
------------------------------- x 100 =  --------- x 100 = -8.36
       yesterdays_value                     550

我的问题是:这可以在MySQL中完成吗?如果可以,如何或应该使用PHP层(最好不要:-)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-10 22:42:23

您可以在SQL中做到这一点。一种方法是使用用户定义的变量来跟踪从一行到下一行的值。为了获得所需的输出,您可以在子查询中进行计算,然后从最终输出中省略跟踪先前行值的列。

尝试如下所示:

代码语言:javascript
复制
select id, _date, views, change_pct
from 
(
  select @id := id as id, _date as _date, @views := views as views, 
    (case when @id = @last_id then round(((@views - @last_views)/@last_views)*100,2) else 0.00 end) as change_pct,
    @last_id := @id, @last_views := @views
  from your_table
  order by id,_date
) as sub_query
order by id,_date;
票数 3
EN

Stack Overflow用户

发布于 2012-09-11 15:11:52

在line4上只有一个小说明,日期是_date而不是_date是_date。

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

https://stackoverflow.com/questions/12353687

复制
相关文章

相似问题

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