競馬のデータを整理していて、SQLの自己結合の方法が解らず相談します。
SQL Server 2017 を使用しています。TransactSQLです。
目的は、ある馬が直前に出走した日付のレースを特定する事です。
テーブルは以下の通りです。
feature (予想テーブル)
race_id int
horse_id intrace_info(レース情報テーブル)
race_id int
date varchar(10)
あるレースの日付を取得したい場合は、以下のように行います。
select f.horse_id,f.race_id,ri.date from feature f inner join race_info ri on f.race_id = ri.race_id
こんなかんじのデータが取得できます。
horse_id | race_id | date |
---|---|---|
2004100525 | 1 | 2006-08-12 |
では、あるレースの直前のレースの日付を取得する場合にはどうすれば良いでしょうか?
このようなデータを取得できたら理想的です。
horse_id | race_id | date | race_id2 | date2 |
---|---|---|---|---|
2004100525 | 1 | 2006-08-12 | 10 | 2006-03-11 |
inner join でもう一つずつfeature とrace_infoを結合する事はできるのですが、日付を > しても、直前のレースだけでなく過去の全てのレースが検索されてしまいます。
MySQLであれば、on句でlimit 1 とかすれば、1レコードだけ取れる気がします。しかしTransactSQLにはありません。
サブクエリでどうにかすればいいかと思ったのですが、サブクエリ内で括弧の外側のテーブルの情報は条件に指定できませんので条件が指定できません。
仮にサブクエリ内からどうにか条件を指定できたとしても、1行のみ取得する方法がわかりません。top 1を使うと、そのテーブルの検索結果の先頭1行しか取得できません。
どうすれば良いのでしょうか。
回答2件
あなたの回答
tips
プレビュー