このディレクトリの索引

# 出典 :: SQL質疑応答スレ 10問目 #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で書きたいです # よろしくお願いします # テーブル(1,'10',aaa). テーブル(2,'20',bbb). テーブル(3,'20',ccc). テーブル(4,'30',ddd). テーブル(5,'30',eee). テーブル(6,'30',fff). テーブル(7,'40',ggg). テーブル(8,'40',hhh). 抽出する行数の上限('10',2). 抽出する行数の上限('20',2). 抽出する行数の上限('30',2). 抽出する行数の上限('40',1). 抽出する行数の上限('50',2). 抽出する行数の上限('60',1). テーブルからcodeグループ単位でn件ずつ取得する(_code,_行ならび) :- テーブルからcode候補を得る(_code候補), codeごとにテーブルから抽出上限以下の行ならびを得る(_code候補,_code,_行ならび). テーブルからcode候補を得る(_code候補) :- findall(_code,[_id,_code,_name] ^ テーブル(_id,_code,_name),_code候補). codeごとにテーブルから抽出上限以下の行ならびを得る(_code候補,_code,_行ならび) :- code候補からcodeを取り出し抽出上限を得る(_code候補,_code,_抽出上限), テーブルから抽出上限以下の行ならびを得る(_code,_抽出上限,_行ならび). code候補からcodeを取り出し抽出上限を得る(_code候補,_code,_抽出上限) :- code候補からcodeを取り出し(_code候補,_code), 抽出する行数の上限(_code,_抽出上限). code候補からcodeを取り出し(_code候補,_code) :- member(_code,_code候補). テーブルから抽出上限以下の行ならびを得る(_code,_抽出上限,_行ならび) :- findnsols([_id,_code,_name],_抽出上限,テーブル(_id,_code,_name),_行ならび).