このディレクトリの索引

# 出典::SQL質疑応答スレ 12問目 #353 # MySQL 5.1 # 株価テーブル kabuka # stock_code ←銘柄コード # vol_date ←出来高年月日 # sp # hp # lp # cp # vol # # 銘柄マスタ stock_info # stoc_code ←銘柄コード # shkbn ←商品区分(0,1,2,3,4) # stk_name ← 銘柄名 # delete_flg 削除区分 # 〜その他いろいろな項目 # # 銘柄マスタの商品区分0及び1は除外して銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日の一覧を出したい # # select a.stock_code,stk_name,shkbn,min(vol_date),max(vol_date) # from kabuka a # inner join stock_info b # on a.stock_code = b.stock_code # where # a.stock_code in # (select b.stock_code from stock_info # where delete_flg=0 and shkbn not in(0,4)) # group by a.stock_code # order by shkbn,a.stock_code; # # で、上記のSQLを書いてみたんですが、shkbnが0及び4のもでてしまいます # 出さないようにするにはどうすればいいのでしょうか? # # 銘柄マスタの商品区分0及び1は除外して銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日の一覧を出したい :- 一覧を出したい(銘柄マスタの商品区分0及び1は除外して(_銘柄,_銘柄名), 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を表示する(_銘柄,_銘柄名)). 一覧を出したい(_表示対象,_表示する) :- forall(_表示対象,_表示する). 銘柄マスタの商品区分0及び1は除外して(_銘柄,_銘柄名) :- setof([_stoc_code,_stk_name],( [_stoc_code,_shkbn,_stk_name,_delete_flg] ^ stock_info(_stoc_code,_shkbn,_stk_name,_delete_flg), 商品区分0及び1は除外して(_shkbn)),LL), member([_銘柄,_銘柄名],LL). 商品区分0及び1は除外して(_shkbn) :- _shkbn=\=0, _shkbn=\=1. 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を表示する(_stock_code,_銘柄名) :- 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を(_stock_code,_最古登録日,_最新登録日), writef('%t,%t,最古登録日=%t,最新登録日=%t\n',[_stoc_code,_銘柄名,_最古登録日,_最新登録日]). 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を(_stock_code,_最古登録日,_最新登録日) :- '銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と'(_stock_code,_最古登録日), 最新登録日を(_stock_code,_最新登録日). 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と(_stock_code,_最古登録日) :- findmin(_vol_date,kabuka(_stock_code,_vol_date,_sp,_hp,_lp,_cp,_vol),_最古登録日). 最新登録日を(_stock_code,_最新登録日) :- findmax(_vol_date,kabuka(_stock_code,_vol_date,_sp,_hp,_lp,_cp,_vol),_最新登録日). findmin(A,B,C) :- findall(A,B,L), 昇順整列した最初の要素(L1,C). 昇順整列した最初の要素(L1,C) :- sort(L,[C|_]). findmax(A,B,C) :- findall(A,B,L1), 昇順整列した最終要素(L1,C). 昇順整列した最終要素(L1,C) :- sort(L1,L2), last(L2,C).