从存档中检查成对的彩票号码
Check pairs of lottery numbers from archive
我正在努力寻找最佳解决方案来检查与我的国家彩票有关的配对。他们画了六个数字。我有一个包含所有以前图纸的数据库。问题是什么是最有效的table结构和检查彩票号码对的方式'?
这是我的 table 的样子:
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 对?
在这里稍微通读一下,但 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;
我正在努力寻找最佳解决方案来检查与我的国家彩票有关的配对。他们画了六个数字。我有一个包含所有以前图纸的数据库。问题是什么是最有效的table结构和检查彩票号码对的方式'?
这是我的 table 的样子:
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 对?
在这里稍微通读一下,但 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;