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。それぞれに同じ数の_datesがありますid

このchangeコラムでは、各企業の昨日と今日のビューの%差を計算したいと思いますid。新しい会社の%changeの計算を開始するときはいつでも、計算する昨日の値がないためid、最初の行に「」と表示されていることに注意してください。0.00他の値は、folmulaを使用して簡単に計算されます。

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

私の質問は:これはMySQLで実行できますか?もしそうなら、どのように、またはPHPレイヤーを使用する必要がありますか(できれば:-)

4

2 に答える 2

3

これはSQLで実行できます。これを行う1つの方法は、ユーザー定義の変数を使用して、ある行から次の行まで値を追跡することです。目的の出力を取得するには、サブクエリで計算を実行してから、前の行の値を追跡する列を最終出力から省略します。

次のようなものを試してください。

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

line4のちょっとしたメモ、dateas_dateではなく_dateas_date。

于 2012-09-11T07:11:52.340 に答える