mysqlでデータの標準バケット化を実行しようとしています。データをいくつかの特性に沿ってN個のバケットに分割し、各エントリにバケット番号を割り当てます。エントリは、次のように日付、permno、およびボリュームで構成されます。
dte、permno、volume、day_rank
1986-03-07、10071、9203、NULL
テーブルのタイトルはbamです。各日付(dte)には、ボリュームに基づいてランク付けしたい多くのpermno(id)があります。次に、各permnoのランキングをday_rankに割り当てます。したがって、クエリが成功すると、ボリュームに基づいて各dteのpermnoがランク付けされます。私はこの複雑なクエリでこれを行おうとしています:
select a.dte, a.permno, count(b.volume) as rnk
from bam a inner join bam b
on a.dte = b.dte and (a.volume < b.volume or (a.permno=b.permno and a.volume = b.volume))
order by a.dte, a.volume;
これは機能しますが、適度なサイズのテーブルの実行に1日ほどかかるほど非常に低速です。
何か案は?