Life Goes On

まあまあだけど楽しんでる方です

90パーセンタイル値取得

最近、とあるアプリケーションの性能測定を行っています。
そこで処理時間の90パーセンタイル値をログから取得することにしました。
90パーセンタイル値というのは処理時間の大きい10%のケースを例外として除外し、残りの90%のケースで最大値を求めるものです。
ログはMicrosoft Accessに格納されており、以下のようなSQLを考えました。
求める結果は得られたのですが、最深部の副問合せのコストが大きく、10万件のログで1〜2時間かかってしまいます。
何かよいチューニング方法があるでしょうか?
イデアをお持ちの方はぜひコメントをお願いします。

select 処理ID, max(処理時間)
from (
  select 処理ID, 処理時間
  from (
    select 処理ID, 処理時間,
      (select count(*)
      from ログ
      where 処理ID = t1.処理ID
        and 処理時間 < t1.処理時間) count,
      (select count(*)
      from ログ
      where 処理ID = t1.処理ID
      group by 処理ID) total
    from ログ t1) t2
  where count / total < 0.9) t3
group by 処理ID;