>>795
% Prolog

前回売上との比較売上表(_年/_月/_日) :-
    setof(_商品ID,(売上(_商品ID,_日付,_),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上のあった商品IDならび),
    write('商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率\n'),
    member(_商品ID2,_売上のあった商品IDならび),
    当日の売上金額計(_商品ID2,_年/_月/_日,_売上金額計),
    前回売上があった日(_商品ID2,_日付,_前回売上があった日),
    前回売上があった日の売上金額計(_商品ID2,_前回売上があった日,_前回売上があった日の売上金額計),
    売上行表示(_商品ID2,_年/_月/_日,_売上金額計,_前回売上があった日の売上金額計),
    fail.
前回売上との比較売上表(_,_,_).

前回売上があった日(_商品ID,_日付,_前回売上があった日) :-
    localtime(_日付,_年1,_月1,_日1,_,_,_,_),
    findmax(_年2/_月2/_日2,(売上(_商品ID,_日付2,_),localtime(_日付2,_年2,_月2,_日2,_,_,_,_),_年1/_月1,_日1 @> _年2/_月2/_日2),_前回売上があった日).

前回売上があった日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付2,_売上金額),localtime(_日付2,_年,_月,_日,_,_,_,_)),_売上金額計).

当日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付,_売上金額),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上金額計).

売上行表示(_商品ID,_年/_月/_日,_売上金額計,0.0) :-
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  | -------------- | ----\n',[_商品ID2,_年/_月/_日,_売上金額計]),!.
売上行表示(_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計) :-
    _売上増加率 is _売上金額計 / _前回売上のあった日の売上金額計,
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  |  %4.1f\n',[_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計,_売上増加率]),!.