スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GGA・拡張SQL記述方法(1)

ふと思いついたので記事にしてみようかなーと。案外使ってる方が多くない印象がありましたので。


さて、基本的にはGGAでの分析をしたことがある方向きですw 競走馬の過去歴も過去5走までであればGGAで調査出来ますが、それ以上となるとSQLの出番になります。例えば、過去1年内に中山D1200でテン34.5以内で走破している馬をピックアップしたいなどの用途での検索ですね。


まずはどうこう言わず見て頂きましょう。こんな感じです。

(サンプル:新潟or中山D1200で良~稍重時テン35.0以内・重~不良時テン34.5以内+同級5着内or着差0.5秒以内の馬を抽出する際のSQL)

(SELECT COUNT(*) FROM D番組データ AS D_B INNER JOIN (D競走馬データ AS D_K INNER JOIN D成績データ AS D_S ON D_K.競走成績キー = D_S.競走成績キー) ON D_B.レースキー = D_K.レースキー WHERE (D_K.血統登録番号 = D競走馬データ.血統登録番号) AND (D_B.年月日 < D番組データ.年月日) AND (D_B.年月日 >= D番組データ.年月日 - 10000) and (D_B.芝ダ障害コード = '2') and (D_B.距離 = '1200') and ((left(D_B.レースキー,2) in ('04','06')) ) and ( ( (D_S.馬場状態 in ('10','11','12','20','21','22')) and (D_S.前3F >= 0 AND D_S.前3F <=350) ) or ( (D_S.馬場状態 in ('30','31','32','40','41','42')) and (D_S.前3F >= 0 AND D_S.前3F <= 345) ) ) and ((D番組データ.条件=D_B.条件) and ((D_S.着順 between 1 AND 5) or (D_S.[1(2)着タイム差] >= '000' AND D_S.[1(2)着タイム差] <= '005' )) )) >= 1


…英字だらけで嫌になりますねw この段階で拒否反応起こしたくなるかと思います。とは言え、難しいことはそこまでないので頑張って付いてきて下さい。


まずはSQL記述の簡易ルール。

・ 抽出条件はWHERE以下で書く

ま、これは覚えなくてもOKです。どうせ使いまわしなので。

・ A and B となっていればAとBの両方の条件を満たせばOK
・ A or B となっていればAかBのどちらかを満たせばOK


これ重要。慣れるまでちょっと大変ですが、数Aで集合論をやった方は何となくイメージ出来るでしょ。まぁ覚えて下さい。
また、例えばAとB、またはAとCを満たす条件を作りたい場合は、Aを満たした上でBかCを満たせば良いので、
A and (B or C)
という様に記述することになります。

・ 一個の条件は必ず()で囲む

これは厳密に守る必要性はないんですが、サンプルを見れば分かる通り異様に長くなるのがデフォルトです。その為、見やすさ追求もあってこうしておいた方が良いよーという推奨事項です。


作成方法は次回以降の記事にて。
スポンサーサイト

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。