Проверить пары лотерейных номеров из архива

Я пытаюсь найти наилучшее возможное решение для проверки пар, относящихся к моей национальной лотерее. Они рисуют шесть чисел. У меня есть база данных со всеми предыдущими рисунками. Вопрос в том, какова наиболее эффективная структура таблицы и способ проверки пар лотерейных номеров?

Вот так выглядит моя таблица:

year (float)    
date (nvarchar)    
draw (float)    
no1 (smallint)    
no2 (smallint)    
no3 (smallint)    
no4 (smallint)    
no5 (smallint)    
no6 (smallint)

Я использую этот запрос, чтобы найти пару чисел:

SELECT COUNT(*)
FROM archive
WHERE '1' IN (no1,no2,no3,no4,no5,no6) AND '36' IN (no1,no2,no3,no4,no5,no6)

Получил результат 10 (пара выпадала 10 раз).

Если я хочу проверить следующую пару, например 1 и 37, мне нужно снова использовать запрос, но с другими числами

SELECT COUNT(*)
FROM archive
WHERE '1' IN (no1,no2,no3,no4,no5,no6) AND '37' IN (no1,no2,no3,no4,no5,no6)

У меня получилось 13 (пара выпадала 13 раз)

Есть ли SQL-запрос (или какое-то лучшее решение), который может автоматически проверять пары в диапазоне чисел от 1 до 90; пример:

Pair 1 and 2
Pair 1 and 3
Pair 1 and 4
.
.

вплоть до пары 89 и 90?


person PeroProspero    schedule 25.11.2019    source источник
comment
Пожалуйста, скажите мне, что вы делаете это не для того, чтобы попытаться предсказать будущие розыгрыши!!   -  person TomC    schedule 26.11.2019


Ответы (1)


Немного читая строки здесь, но Tally кажется лучшим выбором здесь:

WITH N AS(
    SELECT N
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
    SELECT TOP (90) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
    FROM N N1, N N2)
SELECT COUNT(*) AS Draws,
       T1.I AS Number1,
       T2.I AS Number2
FROM dbo.Archive S
     CROSS JOIN Tally T1
     JOIN Tally T2 ON T1.I < T2.I
WHERE T1.I IN (no1,no2,no3,no4,no5,no6)
  AND T2.I IN (no1,no2,no3,no4,no5,no6)
GROUP BY T1.I, T2.I;
person Larnu    schedule 25.11.2019
comment
Большое спасибо, это именно то, что я хотел и искал в течение нескольких дней, и это работает! :) - person PeroProspero; 25.11.2019