ロト6のデータベースを作ってるんですが、ある当選番号とn個以上一致するレコードをSQLだけで探せないかとずっと思ってたんですがcopilotに聞いてみたらなんか出来ました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT t1.kaisuu AS kaisuu1, t1.num1, t1.num2, t1.num3, t1.num4, t1.num5, t1.num6, t2.kaisuu AS kaisuu2, t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6 FROM loto6_tousen_tbl t1 JOIN loto6_tousen_tbl t2 ON t1.kaisuu != t2.kaisuu WHERE ( (t1.num1 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num2 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num3 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num4 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num5 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num6 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) ) >= 4 order by kaisuu1, kaisuu2; |
上記は4個以上の例です。
さらに特定の数値とか回数とかならWHERE条件を増やせばいいわけで。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SELECT t1.kaisuu AS kaisuu1, t1.num1, t1.num2, t1.num3, t1.num4, t1.num5, t1.num6, t2.kaisuu AS kaisuu2, t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6 FROM loto6_tousen_tbl t1 JOIN loto6_tousen_tbl t2 ON t1.kaisuu != t2.kaisuu WHERE ( (t1.num1 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num2 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num3 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num4 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num5 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) + (t1.num6 IN (t2.num1, t2.num2, t2.num3, t2.num4, t2.num5, t2.num6)) ) >= 4 and t1.num1 = 1 and t1.num2 = 5 and t1.num3 = 12 and t1.num4 = 16 and t1.num5 = 17 and t1.num6 = 40 order by kaisuu1, kaisuu2; |
実行してみると以下のような結果になります。
左側が比較対象元のレコード。
右側が一致するレコード。
第1回の当選番号と4つ以上一致するのが461、599、788、897、1036、1087の6回ある事がわかります。
2025/04/20時点でロト6は1991回開催されてますが、意外と全く初よりは一致する物があるので分析に活かせればと。

【備忘録】【SQL】複数のカラムでn個以上一致するレコードを探す