[pgsql-jp: 26185] Re: 集約関数と副問い合わせ

WADA Hiroyuki wada @ komine-ag.co.jp
2002年 5月 29日 (水) 11:13:26 JST


高森 みつき wrote:
> 
> 日付がTIMESTAMP型でしたので、
> 2つ目のSQL文の
> BETWEEN ’2002/1/1’ AND ’2002/1/31’を
> BETWEEN '2002-1-1 00:00:00' AND '2002-1-31 23:59:59'と修正し、
> 
> Select count(time) from (Select name, min(time) from
> database group by name) WHERE time BETWEEN ’2002/1/1’ AND ’2002/1/31’
> ;としました。

修正が入ってませんが?

> これでPostgresqlは「その人の最も古いアクセス日時を拾ってきて、
> 日付範囲の中だったらカウントする」と解釈してくれないのでしょうか?

件数を数えるだけなら count(*) の方がいい
サブクエリにはASが必要
サブクエリにtimeというカラムがない

ということで、
select count(*) from
 (select name,min(time) as time from database group by name) as t
where time between '2002-1-1 00:00:00' AND '2002-1-31 23:59:59'
てなもんでしょうか。

月だけ見ればいいケースなので、betweenよりもto_charを使って文字列に
してしまった方が簡単。(date_truncというのもありますが)
select month,count(*) from
 (select name,min(to_char(time,'YYYY-MM')) as month
  from database group by name) as t 
group by month
のようにすれば、複数月をまとめてもできます。

和田



pgsql-jp メーリングリストの案内