accessメモ #3

2か月のぶりの投稿になります。

今回はタイトルの通りaccessメモをつらつらと書いていきます。

最近になってデータベースが壊れてしまい、キーワードも消えてしまうという悲劇...

(バックアップ取っておけばいいんですが)

そんな時にここ見れば労力つかわないで登録していけるかなと思い忘備録代わりに。

今回はJRDBのデータを引っ張ってくるキーワードが含まれています。

サブクエリーを使う式がほとんど。サブクエリーが使えればかなり幅が広がると思います。

 

◆カスタムキーワード

上から順に対象テーブル、カスタムキーワード名、計算式になります。

//はコメント記号で//以降に書いた文は、その行の最後まではコメント(注釈)とみなされ、削除して実行されるのでSQL文の実行には影響を与えない。

 

出走馬T

競走成績キー //JRDBのコードと同様のコードをさK巣栄する必要があるため作成

RIGHT(出走馬T.血統登録番号,8) & FORMAT(出走馬T.年月日,"yyyymmdd")

 

出走馬T

前走1競走成績キー //気配コードを参照する際に使用

SELECT D競走馬データ.前走1競走成績キー

FROM (レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)

LEFT JOIN D競走馬データ ON S.競走成績キー=D競走馬データ.競走成績キー

WHERE S.競走コード=出走馬T.競走コード

AND S.馬番=出走馬T.馬番

 

出走馬T

IDM

SELECT D競走馬データ.IDM //IDMは全角英数なので注意

FROM (レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)

LEFT JOIN D競走馬データ ON S.競走成績キー=D競走馬データ.競走成績キー

WHERE S.競走コード=出走馬T.競走コード

AND S.馬番=出走馬T.馬番

 

出走馬T

基準オッズ

SELECT D競走馬データ.基準オッズ

FROM (レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)

LEFT JOIN D競走馬データ ON S.競走成績キー=D競走馬データ.競走成績キー

WHERE S.競走コード=出走馬T.競走コード

AND S.馬番=出走馬T.馬番

 

出走馬T

馬主会

SELECT C場.場

FROM *1
異常区分コード not between 1 and 3

レース 過程値b合計 
int(sum(過程値b)*10)/10

出走馬 調節値 
abs( (100.1-過程値b合計)*10)
異常区分コード not between 1 and 3

出走馬 勝率 
IIF(頭数<調節値,過程値b+int( ( (調節値-0.1*頭数)/頭数/10)*10)/10,
IIF(頭数<調節値,過程値b-int( ( (調節値-0.1*頭数)/頭数/10)*10)/10,
IIF( (過程値b合計<100) and (IDM順位>(頭数-調節値)),過程値b+0.1,
IIF( (過程値b合計>100) and (IDM順位<(頭数-調節値)),過程値b-0.1,過程値b))))
異常区分コード not between 1 and 3

 

*1:レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)

LEFT JOIN D競走馬データ ON S.競走成績キー=D競走馬データ.競走成績キー)

LEFT JOIN C場 ON D競走馬データ.馬主会コード=C場.場コード

WHERE S.競走コード=出走馬T.競走コード

AND S.馬番=出走馬T.馬番

 

出走馬T

蹄コード

SELECT D競走馬データ.蹄コード

FROM (レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)

LEFT JOIN D競走馬データ ON S.競走成績キー=D競走馬データ.競走成績キー

WHERE S.競走コード=出走馬T.競走コード

AND S.馬番=出走馬T.馬番

 

出走馬T

SELECT C蹄.蹄

FROM (レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)

LEFT JOIN C蹄 ON S.蹄コード=C蹄.蹄コード

WHERE S.競走コード=出走馬T.競走コード

AND S.馬番=出走馬T.馬番

 

※蹄を1つのキーワードで表示させたい場合

SELECT C蹄.蹄
FROM ((レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)
LEFT JOIN D競走馬データ ON S.競走成績キー=D競走馬データ.競走成績キー)
LEFT JOIN C蹄 ON D競走馬データ.蹄コード=C蹄.蹄コード
WHERE S.競走コード=出走馬T.競走コード
AND S.馬番=出走馬T.馬番

 

出走馬T

気配コード

SELECT D成績データ.気配コード
FROM (レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)
LEFT JOIN D成績データ ON S.前走1競走成績キー=D成績データ.競走成績キー
WHERE S.競走コード=出走馬T.競走コード
AND S.馬番=出走馬T.馬番

 

出走馬T

気配

SELECT C気配.気配

FROM (レースT INNER JOIN 出走馬T AS S ON レースT.競走コード=S.競走コード)

LEFT JOIN C気配 ON S.気配コード=C気配.気配コード

WHERE S.競走コード=出走馬T.競走コード

AND S.馬番=出走馬T.馬番

 

IDM勝率計算式

 

レース IDM平均値a 
INT(AVG(IDM)*10)/10

レース IDM平均値b 
INT(AVG(IDM)*10)/10
IDM>IDM平均値a-20

レース 最低勝率 
INT(10/頭数*10)/10

出走馬 過程値 
IIF( (IDM-IDM平均値b+14)<=0,"0",INT( (IDM-IDM平均値b+14)^4*10)/10)
異常区分コード not between 1 and 3

レース 過程値合計 sum(過程値)

出走馬 過程値a 
INT(過程値/過程値合計*100*10)/10
異常区分コード not between 1 and 3

出走馬 過程値b 
IIF(異常区分コード between 1 and 3,0,IIF(過程値a<最低勝率,最低勝率,INT(過程値/過程値合計*100*10)/10