2010年9月16日

[pgsql-jp: 40402] Re:n行のテーブルより任意の1行を取り出すSQL

あきらです

> シーケンスの欠番の偏りは気になりますが、tに対してdeleteが走ったりする構造
> でない限り、また何らかの理由で明示的にrollbackさせることを想定した実装でない
> 限り、多くの場合、欠番の発生は一定確率に収まるはずなので、これで大丈夫そうで
> す。そもそも「無作為」が要件ですし…。

すでにある程度解決していると思いますがファンクションを利用して。。。


-- createlang -h 127.0.0.1 -d dbname -U username plpgsql

-- drop function get_random_t_i();
create function get_random_t_i() returns integer as
'
declare
ret integer;
max_i integer;
begin
select max(i) into max_i from t;
WHILE ret is null LOOP
select i into ret from t WHERE i = (random()*max_i)::integer;
END LOOP;
return ret;
end;
'
language 'plpgsql'
;

select get_random_t_i();

個人的にはループの内容がnullだったらプログラムの方で再度取得しなおした
方がすっきりしてあとのメンテナンスが楽だなと思います

あきら


投稿者 xml-rpc : 2010年9月16日 11:12
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/98382
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。