[pgsql-jp: 26451] Re: 集約関数と副問い合わせ
ISHIDA Akio
iakio @ pjam.jpweb.net
2002年 6月 19日 (水) 12:35:46 JST
こんにちは。石田@苫小牧市です。
On Sun, Jun 16, 2002 at 10:00:02PM +0900, 高森 みつき wrote:
> ファイルのアクセス履歴を取っています。
> フィールド構成は
> アクセスした人|アクセス日
> の2フィールドとしています。
>
> これから日付ごとに、初めてアクセスした人がどれだけいるか
> 表示したいのです。(これは以前教えていただいたSQLです)
>
> select month,count(*) from
> (select name,min(to_char(time,'YYYY-MM-DD')) as t_date
> from database group by name) as t
> group by t_date
> order by t_date
> 人ごとに、一番初めにアクセスした日を取得し
> カウントしています。
>
> 期待通りの結果は得られたのですが、表示まで時間がかかります。
> MINの部分で時間がかかっているのです。
>
> 各日のアクセス者を調べ、以前に同じアクセス者がいれば後のレコードは調査し
> ない。
> ない場合にだけカウントしたいのです。
> こういうことって実現できるのでしょうか?
>
> 泥沼にはまっています。
>
> みつき@考え中・・
速いかどうかはわかりませんが、こう書きかえることもできそうです。
select to_char(d, 'YYYY-MM-DD'), count(*) from database as d1
where not exists
(select * from database as d2
where d1.name = d2.name
and d1.time > d2.time)
group by to_char(d, 'YYYY-MM-DD')
# explain の結果もよかったら教えてください。
--
ISHIDA Akio
pgsql-jp メーリングリストの案内