1

私はテーブル「item_prices」を持っています:

resource_id, avg_price, time_stamp, samples

アイテムは、毎日テーブルに挿入される新しい平均価格を取得します。古い平均は削除されません。

昨日の平均から「価格の上昇率」が最も高い 10 個のアイテムを照会するにはどうすればよいですか? 精度を確保するために、サンプル数が 10 を超えていることも確認したいと思います。

「価格の上昇率」を明確にする:

percent_increase = (todays_avg_price - yesterdays_avg_price) / yesterdays_avg_price

resource_id |  avg_price |  time_stamp |  samples

    1           450         1380526003     12
    2           650         1380526002     2
    3           980         1380526001     68

    1           400         1380440003     24
    2           700         1380440002     13
    3           400         1380440001     38

    1           900         1380300003     11
    2           250         1380300002     8
    3           300         1380300001     4

戻り値

resource id  |  percent_increase

     3              1.45    
     1              0.125
4

2 に答える 2

1
select  
today.resource_id, 
(today.avg_price - yesterday.avg_price) / yesterday.avg_price as percent_increase
from 
item_prices today, 
item_prices yesterday
where today.resource_id = yesterday_resource_id
and   DATE(FROM_UNIXTIME(today.timestamp)) = $today
and   DATE(FROM_UNIXTIME(yesterday.timestamp)) = $yesterday
order by percent_increase desc 
limit 10

これは自己結合です。古風な結合構文で申し訳ありません。これは、私が断りにくい悪い習慣です。

于 2013-10-01T16:27:49.120 に答える
-1

以下のクエリを試してください。

  select top 1 resource_id,avg_price from item_Prices 
  group by resource_id,avg_price
  having count(resource_id,avg_price)>
  10 order by time_stamp 
于 2013-09-30T06:31:14.180 に答える