このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1274791771/872
#  ・DBバージョン 
#  MySQL5.0.77  
#   
#  id | code | name 
#  --+-----+------ 
#  1 | 10  | aaa 
#  2 | 20  | bbb 
#  3 | 20  | ccc 
#  4 | 30  | ddd 
#  5 | 30  | eee 
#  6 | 30  | fff 
#  7 | 40  | ggg 
#  8 | 40  | hhh 
#   
#  ・欲しい結果  
#  (code)グループ単位でn件を取得する 
#   
#  ・説明  
#  code毎に抽出する行数の上限を指定したいです 
#  postgresでは 
#  http://ime.nu/blogs.wankuma.com/kacchan6/archive/2007/06/07/79946.aspx 
#  oracleでは 
#  http://ime.nu/www.ne.jp/asahi/hishidama/home/tech/oracle/rownum.html#TopN_partition_by 
#  のようなことをmysqlで書きたいです 
#  よろしくお願いします 
#   

'抽出する行数の上限'('10',2).
'抽出する行数の上限'('20',2).
'抽出する行数の上限'('30',2).
'抽出する行数の上限'('40',1).
'抽出する行数の上限'('50',2).
'抽出する行数の上限'('60',1).

'(code)グループ単位でn件を取得する'([_id,_code,_name]) :-
        findasetof(_code,テーブル(_,_code,_),L1),
        append(_,[_code|R],L1),
        findall([_id,_code,_name],テーブル(_id,_code,_name),L2),
        '抽出する行数の上限'(_code,_行数の上限),
        行数の上限以内に丸める(L2,_行数の上限,L3),
        append(_,[[_id,_code,_name]|_],L3).
        
行数の上限以内に丸める(L2,_行数の上限,L) :-
        length(L,_行数の上限),
        append(L,_,L2),!.
行数の上限以内に丸める(L,_行数の上限,L).