[pgsql-jp: 32587] Re: 週単位の件数取得

Hisashi Chiba ch-999 @ beige.plala.or.jp
2004年 3月 26日 (金) 11:57:12 JST


千葉です。
皆さん色々有り難うございます。

Nakagawa Yasuharu wrote:
> 年と週を含めた関数を作ってあげた方がやりやすいかも知れませんね。
snip
> ===
> create or replace function yw( date ) returns integer as '
> declare
>  dd alias for $1 ;
>  yr integer ;
>  mn integer ;
>  wk integer ;
>  ret integer ;
> begin
>  yr := date_part( ''year'', dd ) ;
>  mn := date_part( ''month'', dd ) ;
>  wk := date_part( ''week'', dd ) ;
>  if wk = 1 and mn = 12 then
>      yr := yr + 1 ;
>  end if ;
>  if wk >= 52 and mn = 1 then
>      yr := yr - 1 ;
>  end if ;
>  ret := yr * 100 + wk ;
>  return ret ;
> end ;
> ' language 'plpgsql' ;
> ===

という事で、早速この関数をcreateし、実行してみました。
昨日のテーブル構成とは若干違いますが、実環境でやってみました。

select
          year
        , month
        , week
        , count(*)
from (
        select
                  extract(year from pay_date) as year
                , extract(month from pay_date) as month
                , yw(pay_date) as week
        from elec_pay
        where pay_date between '2002-02-01' and '2004-12-31'
     ) as pay
group by
          year
        , month
        , week
order by
          year
        , month
        , week
;

結果の一部を下記に示します。
year  |month  | week   |count
------+-------+--------+-------
 2003 |    12 | 200349 |     1
 2003 |    12 | 200351 |     8
 2003 |    12 | 200352 |     8
 2003 |    12 | 200401 |     3
 2004 |     1 | 200402 |     1
 2004 |     1 | 200404 |    13
 2004 |     1 | 200405 |     3

有り難うございました。



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