このディレクトリの索引

# 出典::SQL質疑応答スレ 13問目 #43 # 質問:「指定条件に一番近い最大値を持つレコード」でテーブル結合したい # 環境:postgresql 9.0 # # 価格変動テーブル # kakaku_datetime name price # 2012-08-01 10:00:00 トマト 100円 # 2012-08-01 10:00:00 バナナ 200円 # 2012-08-10 10:00:00 バナナ 180円 # 2012-08-15 10:00:00 トマト 150円 # # 売上履歴テーブル # uriage_datetime name # 2012-08-01 12:00:00 トマト # 2012-08-05 18:00:00 トマト # 2012-08-08 15:00:00 バナナ # 2012-08-16 19:00:00 トマト # # を結合させて、以下のように「その時にいくらだったか?」を含めたテーブルにしたいです。 # uriage_datetime name price # 2012-08-01 12:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-05 18:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-08 15:00:00 バナナ 200円 ←kakaku_datetime = 2012-08-01 10:00:00 のバナナの価格を取ってくる # 2012-08-16 19:00:00 トマト 150円 ←kakaku_datetime = 2012-08-15 10:00:00 のトマトの価格を取ってくる # # よろしくお願いします。 # # '「指定条件に一番近い最大値を持つレコード」でテーブル結合したい'(_uriage_datetime,_name,_price) :- 売上履歴テーブル(_uriage_datetime,_name), findmax([_kakaku_datetime,_price],( 価格変動テーブル(_kakaku_datetime,_name,_price), _uriage_datetime @>= _kakaku_datetime),[_kakaku_datetime,_price]). findmax(T,P,Max) :- findall(T,P,L), 最大値(L,Max). 最大値([A|R],_最大値) :- 最大値(R,A,_最大値). 最大値([],_最大値,_最大値). 最大値([A|R],B,_最大値) :- A @> B, 最大値(R,A,_最大値). 最大値([A|R],B,_最大値) :- A @=< B, 最大値(R,B,_最大値).