このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1299305530/6
#  よくある質問1 
#   
#  (問) 
#  ID | DATE     | DATA 
#  --+----------+----- 
#  1 | 2007-11-11 | aaa 
#  2 | 2007-11-11 | bbb 
#  1 | 2007-11-10 | ccc 
#  3 | 2007-11-12 | ddd 
#  3 | 2007-11-11 | eee 
#  4 | 2007-11-10 | fff 
#  1 | 2007-11-12 | ggg 
#   
#  このようなテーブルから、下記のように 
#   
#  1 | 2007-11-12 | ggg 
#  3 | 2007-11-12 | ddd 
#  2 | 2007-11-11 | bbb 
#  4 | 2007-11-10 | fff 
#   
#  各idに対して最新の1件だけ抽出するSQLの書き方を教えてください。 
#   
#  (答) 
#  select A.ID, 
#      A.DATE, 
#      A.DATA 
#  from TableName A 
#     inner join 
#     (select ID, max(DATE) as MAX_DATE 
#      from TableName 
#      group by ID 
#     ) B 
#     on A.ID = B.ID 
#     and A.DATE = B.MAX_DATE 
#  ; 
# 

'TableName'(1,'2007-11-11',aaa). 
'TableName'(2,'2007-11-11',bbb).
'TableName'(1,'2007-11-10',ccc). 
'TableName'(3,'2007-11-12',ddd).
'TableName'(3,'2007-11-11',eee).
'TableName'(4,'2007-11-10',fff).
'TableName'(1,'2007-11-12',ggg).


'各idに対して最新の1件だけ抽出する'(_ID,_DATE,_DATA) :-
        findsetof(_ID,'TableName'(_ID,_,_),L1),
        append(_,[_ID|_],L1),
        findmax([_DATE,_ID,_DATA],(
                    'TableName'(_ID,_DATE,_DATA)),
                [_DATE,_ID,_DATA]).