sql-server - SQL Server:如何找到最大长度连续范围?
问题描述
我有一个包含一个整数列 (signed) 的表NUM
。
在每一行中,该表都包含一个随机数。每个数字在表中出现任意次数。
我需要找到表中存在的连续(不丢失数字)范围的最大长度,考虑错过。
min(NUM) max(NUM) 范围内的数字(其中 SQL 的 min 和 max 函数)
解决方案
这听起来像是一个典型的差距和孤岛问题:
SELECT TOP 1 MIN(num) num_from, MAX(num) num_upto, COUNT(DISTINCT num) num_count
FROM (
SELECT num, SUM(num_changed) OVER (ORDER BY num) num_groupno
FROM (
SELECT num, CASE WHEN LAG(num) OVER (ORDER BY num) BETWEEN num - 1 AND num THEN 0 ELSE 1 END num_changed
FROM (VALUES
(1),
(2),
(3),
(5),
(6),
(7),
(7),
(8),
(10)
) v(num)
) cte1
) cte2
GROUP BY num_groupno
ORDER BY COUNT(DISTINCT num) DESC
结果:
num_from num_upto num_count
5 8 4
推荐阅读
- django - Django Oscar,如何通过允许用户输入自己的价值来使产品价格动态化
- javascript - 动态遍历深层嵌套对象并累加结果
- react-native - React-Native 动画手风琴/抽屉/下拉/可折叠卡片
- r - 在 R 中重塑数据框,不同的日期
- lua - 如何在 Roblox 中触发 MouseButton1Click 事件?
- c++ - C++ For 具有多个参考值的范围循环 [a, b]
- scala - Spark - 尝试运行应用程序时,必须在您的配置中设置主 URL”
- c# - System.Runtime.Serialization.InvalidDataContractException 'System.Security.Cryptography.X509Certificates.X509Certificate2'
- angular - JSON 解析错误:无法反序列化 java.lang.Long 的实例超出 START ARRAY 令牌
- python-3.x - 我收到 pyzipper {NameError}name 'self' is not defined 和 {NameError}name 'parent_module' is not defined 的错误