如何在SQL Server中查询同一表内的重复数字集合及彩票开奖组合?
查询SQL Server中重复的强力球开奖号码组合
针对你的彩票数据表(包含draw_date、num1-num5主号码、num6强力球),这里提供两种常见场景的查询方案,覆盖不同的重复判定逻辑:
场景1:严格匹配号码顺序
如果需要找出完全和开奖顺序一致的重复组合(比如num1=1,num2=2...和另一行完全相同),用基础的分组查询即可:
SELECT num1, num2, num3, num4, num5, num6, COUNT(*) AS 重复次数, MIN(draw_date) AS 首次开奖日期, MAX(draw_date) AS 末次开奖日期 FROM 你的彩票表名 GROUP BY num1, num2, num3, num4, num5, num6 HAVING COUNT(*) > 1 ORDER BY 重复次数 DESC;
简单说明:
GROUP BY将所有号码列完全相同的行归为一组HAVING COUNT(*) >1只保留出现过多次的组合- 额外返回的重复次数、开奖日期能帮你快速了解重复情况
场景2:忽略主号码顺序(更符合彩票实际规则)
强力球的5个主号码不区分顺序,比如1,2,3,4,5和5,4,3,2,1属于同一个组合。这种情况需要先对主号码排序,再判断重复:
适合SQL Server 2017及以上版本的简洁写法(支持STRING_AGG函数):
SELECT STRING_AGG(num, ',') WITHIN GROUP (ORDER BY num) AS 主号码组合, num6 AS 强力球号码, COUNT(*) AS 重复次数, MIN(draw_date) AS 首次开奖日期, MAX(draw_date) AS 末次开奖日期 FROM ( -- 把每行的5个主号码拆成单独行,方便排序拼接 SELECT draw_date, num6, num FROM 你的彩票表名 CROSS APPLY (VALUES(num1),(num2),(num3),(num4),(num5)) AS nums(num) ) AS 拆分后的主号码 GROUP BY num6, STRING_AGG(num, ',') WITHIN GROUP (ORDER BY num) HAVING COUNT(*) > 1 ORDER BY 重复次数 DESC;
简单说明:
- 内层查询用
CROSS APPLY把每行的5个主号码拆成5行 - 用
STRING_AGG按从小到大的顺序拼接主号码,确保相同号码集合生成一致的字符串 - 最后按拼接后的主号码字符串和强力球分组,筛选重复组合
新手注意事项
- 把代码里的
你的彩票表名替换成你实际使用的表名称 - 如果表中有空值,可在
FROM后加上WHERE num1 IS NOT NULL AND num2 IS NOT NULL AND num3 IS NOT NULL AND num4 IS NOT NULL AND num5 IS NOT NULL AND num6 IS NOT NULL过滤无效数据
内容的提问来源于stack exchange,提问作者tnmoi
相关产品推荐
相关产品推荐

