このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/598
#  mysql 5.5 
#   
#  テーブル master 
#  tcode 
#  tname 
#  lastdate 
#  〜 
#   
#  daily_data 
#  select tcode,max(tdate) as maxdate  
#  from daily_date 
#  group by tcode; 
#   
#  このdaily_dateから得られるmaxdateを使って 
#  masterのtcodeの対応するlastdateに入れたいのですが、 
#  どのようにupdateを書けば良いのでしょうか? 
# 

'daily_dateから得られるmaxdateを使ってmasterのtcodeの対応するlastdateに入れたい' :-
        dail_dateテーブルの構造(P1,_daily_date_tcode,_date),
        masterテーブルの構造(P2,_master_tcode,_lastdate),
        findsetof(_tcode,P1,L1),
        最大日付に変更する(L1,P1,P2,_daily_date_tcode,_date,_master_tcode,_lastdate),!.

daily_dateテーブルの構造(P,_tcode,_date) :-
        count(テーブル定義(daily_date,_,_),_アリティ),
        length(L,_アリティ),
        P =.. [daily_date|L],
        tcodeとdateの列位置を確定する(L,_tcode,_date),!.

tcodeとdateの列位置を確定する(L,_tcode,_date),!.
        テーブル定義(daily_date,_nth1_tcode,tcode),
        テーブル定義(daily_date,_nth1_date,date),
        nth1(_nth1_tcode,L,_tcode),
        nth1(_nth1_date,L,_date),!.

masterテーブルの構造(P,_tcode,_date) :-
        count(テーブル定義(master,_,_),_アリティ),
        length(L,_アリティ),
        P =.. [master|L],
        tcodeとlastdateの列位置を確定する(L,_tcode,_lastdate),!.

tcodeとlastdateの列位置を確定する(L,_tcode,_date),!.
        テーブル定義(master,_nth1_tcode,tcode),
        テーブル定義(master,_nth1_lastdate,lastdate),
        nth1(_nth1_tcode,L,_tcode),
        nth1(_nth1_date,L,_lastdate),!.

最大日付に変更する(L1,P1,P2,_daily_date_tcode,_date,_master_tcode,_lastdate) :-
        forall((    member(_tcode,L1),
                    findmax(_date,P1,_maxdate),
                    lastdateの更新(_maxdate,P2,_tcode,_lastdate)),
                true).

lastdateの更新(_maxdate,P,_tcode,_lastdate) :-
        retract(P),
        _lastdate = _maxdate,
        asserta(P),!.
lastdateの更新(_maxdate,P,_tcode,_lastdate) :-
        _lastdate = _maxdate,
        asserta(P),!.