第5回 最高峰編:過去3走の指数(前走・前々走・3走前)と「近3走平均指数」の自動算出
当日の想定指数(1走分)だけを見ていると、「前走たまたま展開がドハマりして高い指数が出た馬」や「前走不利を受けて指数を落とした実力馬」を見誤ってしまいます。
真の実力を正確に見抜くには、**「前走(ST1)・前々走(ST2)・3走前(ST3)の推移」**と、それらを平均した**「近3走平均ST指数(AVG_ST3)」**を横並びで比較することが不可欠です。
出馬表の右側に、「前走ST」「前々走ST」「3走前ST」「近3走平均ST」がズラリと横並びになり、近3走平均が高い順にソートされたプロ仕様の予想表が一瞬で完成します。
データベースには過去何年分ものレース結果が縦に並んで入っています。この中から「各馬の直近3走だけ」を抜き出すために、**ウィンドウ関数**という強力なツールを使います。
ROW_NUMBER() OVER (
PARTITION BY d.horse_code
ORDER BY d.race_date DESC
) AS rn
このコードがやっていること:
PARTITION BY d.horse_code ➔ 馬(馬コード)ごとにデータを山分けするORDER BY d.race_date DESC ➔ 日付が新しい順(直近順)に並べるROW_NUMBER() ... AS rn ➔ 新しい順に 1 (前走), 2 (前々走), 3 (3走前)... と背番号(連番)を自動で振る一見すると長く複雑に見えるプロ仕様クエリですが、**3つの部屋(ブロック)**に分かれて順に処理されています。
| ブロック名 | 使っている技術 | 処理内容・役割 |
|---|---|---|
| ① past_stride | WITH 句(一時的な下準備)ROW_NUMBER() |
過去の出走データとストライド指数を結びつけ、各馬のレース履歴に新しい順に連番(rn = 1, 2, 3...)を振る。 |
| ② horse_past_summary | CASE WHEN & AVG()GROUP BY horse_code |
連番が 1(前走)、2(前々走)、3(3走前)の指数を抜き出し、同時に3走分の平均ST指数を計算して1行にまとめる。 |
| ③ メインのSELECT | LEFT JOIN(テーブル結合) |
当日の出馬表に、場所マスタ・当日指数・そして②で計算した「過去3走サマリー」を合体させて画面に出力する。 |
以下の枠内のSQLをコピーし、Alma Core Pro のクエリ入力欄に貼り付けて ▶ SQL実行 ➔ 📊 Excel用コピー (TSV) をお試しください。
WITH past_stride AS (
-- ① 過去の出走履歴とストライド指数を紐付け、新しい順に連番(rn)を振る
SELECT
d.horse_code,
d.race_date,
s.st,
s.senko,
s.tsuiso,
ROW_NUMBER() OVER (
PARTITION BY d.horse_code
ORDER BY d.race_date DESC
) AS rn
FROM kol_den2 d
INNER JOIN kol_stride s
ON d.race_date = s.race_date
AND d.venue_code = s.venue_code
AND d.race_number = s.race_number
AND d.horse_number = s.horse_number
WHERE d.race_date < '20260816'
),
horse_past_summary AS (
-- ② 前走(rn=1), 前々走(rn=2), 3走前(rn=3) を抽出し、平均値を算出
SELECT
horse_code,
MAX(CASE WHEN rn = 1 THEN st END) AS st_prev1,
MAX(CASE WHEN rn = 2 THEN st END) AS st_prev2,
MAX(CASE WHEN rn = 3 THEN st END) AS st_prev3,
ROUND(AVG(CASE WHEN rn <= 3 THEN st END), 1) AS st_avg3
FROM past_stride
WHERE rn <= 3
GROUP BY horse_code
)
-- ③ 当日の出馬表・競馬場マスタ・当日指数・過去3走サマリーを結合
SELECT
d.race_date AS 開催日,
v.venue_name AS 競馬場,
d.race_number AS R,
d.horse_number AS 馬番,
d.horse_name AS 馬名,
d.jockey_name AS 騎手,
s_curr.st AS 当日ST,
p.st_prev1 AS 前走ST,
p.st_prev2 AS 前々走ST,
p.st_prev3 AS "3走前ST",
p.st_avg3 AS "近3走平均ST",
s_curr.senko AS 先行力,
s_curr.tsuiso AS 追走力
FROM kol_den2 d
LEFT JOIN mst_venue v
ON d.venue_code = v.venue_code
LEFT JOIN kol_stride s_curr
ON d.race_date = s_curr.race_date
AND d.venue_code = s_curr.venue_code
AND d.race_number = s_curr.race_number
AND d.horse_number = s_curr.horse_number
LEFT JOIN horse_past_summary p
ON d.horse_code = p.horse_code
WHERE d.race_date = '20260816'
AND d.venue_code IN ('08', '8')
AND d.race_number = '11'
ORDER BY p.st_avg3 DESC;
上記クエリを実行すると、以下のように**近3走平均STが高い実力馬順**に綺麗に整列したデータが返ってきます。
| 開催日 | 競馬場 | R | 馬番 | 馬名 | 騎手 | 当日ST | 前走ST | 前々走ST | 3走前ST | 近3走平均ST | 先行力 | 追走力 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 20260816 | 札幌 | 11 | 10 | アドマイヤテラ | 坂井 瑠星 | 75.0 | 78.0 | 72.0 | - | 75.0 | 49.0 | 57.0 |
| 20260816 | 札幌 | 11 | 05 | エコロヴァルツ | 横山 武史 | 64.0 | 69.0 | 73.0 | - | 71.0 | 46.0 | 38.0 |
| 20260816 | 札幌 | 11 | 06 | ローシャムパーク | 池添 謙一 | 73.0 | 71.0 | - | - | 71.0 | 51.0 | 65.0 |
当日指数・前走・前々走・3走前・近3走平均STが横並びになった分析シート
全5回の講習お疲れ様でした! 初心者向けの基本SELECTから、プロ仕様の高度な過去走集計まで、競馬データ分析に必要なすべての基盤スキルを完全に習得しました。
SELECT & AS(欲しい項目を日本語見出しで自由自在に抽出)WHERE(AND / OR / LIKE による高精度な条件スクリーニング)GROUP BY & 集計関数(コース別・種牡馬別・枠番別の統計集計)JOIN(出馬表・マスタ・指数・血統の完全統合によるオリジナル新聞生成)CTE & ウィンドウ関数(過去走履歴の連番付け & 近3走平均指数の自動算出)これらのクエリを活用することで、市販のツールでは真似できない独自の切り口から、高い回収率を生み出す高期待値馬をいつでも瞬時に発掘できるようになります。