请考虑下表:
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计算:
todays_value - yesterdays_value 504 - 550
------------------------------- x 100 = --------- x 100 = -8.36
yesterdays_value 550我的问题是:这可以在MySQL中完成吗?如果可以,如何或应该使用PHP层(最好不要:-)
发布于 2012-09-10 22:42:23
您可以在SQL中做到这一点。一种方法是使用用户定义的变量来跟踪从一行到下一行的值。为了获得所需的输出,您可以在子查询中进行计算,然后从最终输出中省略跟踪先前行值的列。
尝试如下所示:
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;发布于 2012-09-11 15:11:52
在line4上只有一个小说明,日期是_date而不是_date是_date。
https://stackoverflow.com/questions/12353687
复制相似问题