[pgsql-jp: 39892] Re: Lead関数で第3引数を指定すると文法エラーになる。
Tatsuhito Kasahara
kasahara.tatsuhito @ oss.ntt.co.jp
2009年 6月 19日 (金) 14:51:56 JST
こんにちは 笠原と申します。
postgresqlmailabcd @ mail.goo.ne.jp wrote:
> --Lead関数で第3引数を指定すると下記のエラーが発生します。
> postgres=# select ID,SortKey,Val,
> postgres-# Lead(Val,2,999) over(partition by ID order by SortKey)
> postgres-# from tes;
> ERROR: function lead(smallint, integer, integer) does not exist
型の指定が良くないため弾かれているようです
lead()の引数は (value, offset, default) ですが、value と offset は
型が一緒である必要があります。
SELECT proname, proargtypes, prosrc FROM pg_proc WHERE proname = 'lead';
proname | proargtypes | prosrc
---------+--------------+-------------------------------------
lead | 2283 | window_lead
lead | 2283 23 | window_lead_with_offset
lead | 2283 23 2283 | window_lead_with_offset_and_default ★
SELECT oid, typname FROM pg_type WHERE oid IN (23, 2283);
oid | typname
------+------------
23 | int4
2283 | anyelement
★= proargtypes(引数の型) が 2283(anyelement), 23(int4), 2283(anyelement) の必要あり。
なので、例えば以下の様にすると通ると思います。
-- Val と 999 を smallint で統一
select ID,SortKey,Val,
Lead(Val,2,999::smallint) over(partition by ID order by SortKey)
from tes;
-- Val と 999 を int で統一
select ID,SortKey,Val,
Lead(Val::int,2,999) over(partition by ID order by SortKey)
from tes;
どうでしょうか?
--
NTT OSSセンタ
笠原辰仁
kasahara.tatsuhito @ oss.ntt.co.jp
pgsql-jp メーリングリストの案内