0

考虑下表:

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_date每个 s 的数量相同id

change专栏中,我想计算每家公司昨天和今天的观点差异百分比id。请注意,每当我们开始计算新公司的 %change 时id,第一行应该说0.00因为我们没有昨天的值来计算。其他值简单地用公式计算:

todays_value - yesterdays_value          504 - 550
------------------------------- x 100 =  --------- x 100 = -8.36
       yesterdays_value                     550

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

4

2 回答 2

3

您可以在 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-10T14:42:22.513 回答
0

只是第 4 行的一个小注释,日期为 _date 而不是 _date 为 _date。

于 2012-09-11T07:11:52.340 回答