このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1316769778/301
#  MySQLで質問させてください。 
#  ある条件で絞ったレコードを日付でソートして 
#  最新のn件以降を削除したい場合はどのようなSQLを書くのが良いでしょうか? 
#   

'ある条件で絞ったレコードを日付でソートして最新のn件以降を削除する'(_テーブル,_条件,_n件) :-
        ある条件で絞ったレコードを(_テーブル,_条件,LL1),
        日付でソートして(LL1,LL),
        最新のn件以降を(LL,_n件,LL2),
        削除する(_テーブル,LL2).

ある条件で絞ったレコードを(_テーブル,_条件,_削除する件数,_ある条件で絞ったレコード) :-
        属性ならびの取得(_テーブル,_属性名ならび,_属性ならび),
        P =.. [_テーブル|_属性ならび],
        findall(_属性ならび,(
                    P,
                    _条件),
                _ある条件で絞ったレコード).

属性ならびの取得(_テーブル,_属性名ならび,_属性ならび) :-
        setof([_属性順序,_属性名],(
                    テーブル定義(_テーブル,_属性順序,_属性名)),
                L1),
        findall(_属性名,(
                    member([_,_属性名],L2)),
                _属性名ならび),
        length(_属性名ならび,Len),
        length(_属性ならび,Len),!.

日付でソートして(_組ならび,_整列した組ならび) :-
        テーブル定義(_テーブル,_nth,日付),
        findall([_日付|_属性ならび],(
                    member(_属性ならび,_組ならび)),
                LL2),
        sort(LL2,LL3),
        鍵の日付を取り除く(LL3,_整列した組ならび).

最新のn件以降を(LL,_n件,LL2) :-
        length(LL2,_n件),
        append(LL1,LL2,LL),!.

削除する(_テーブル,LL) :-
        append(_,[L|R],LL).
        P =.. [_テーブル|L],
        retract(P),
        R = [].

鍵の日付を取り除く([],[]).
鍵の日付を取り除く([[_|L]|R1],[L|R2]) :-
        鍵の日付を取り除く(R1,R2).