1
1
您需要一个递归查询来查找实际范围(在您的例子中是0到60和80到100)。我们从给定的范围开始,寻找扩展这些范围的范围。最后,我们坚持使用最宽的范围(例如,范围10到30可以扩展到0到40,然后再扩展到0到60,所以我们保持最宽的范围0到60)。
Rextester演示: http://rextester.com/BDJA16583 根据要求,这可以在SQLServer中工作,但是是标准的SQL,因此它应该可以在几乎所有具有递归查询的DBMS中工作。 |
2
2
|
3
0
这是基于不在某个范围内的点将是任一表中包含的数字之一的操作:
因为范围包括第一项,所以实际上不必检查它。因此候选人名单可以减少:
|
4
0
如接受答案中所述,解决方案是将重叠范围合并在一起,然后确定测试范围是否存在于其中一个合并范围内。 除了连接和/或递归之外,还可以使用 sorting approach 使用窗口函数合并重叠范围:
结果和 Fiddle
里面的数据
|
dekarz · 优化SQL查询(查找数据差距)Postgresql 7 年前 |
Nikhil Utane · SQL:检查n个连续记录是否大于某个值 7 年前 |
Smandoli · 用于孤岛和间隙的SQL:孤岛可以重叠 8 年前 |
firereaction · 如何在表中找到一个没有间隙的序列号范围 9 年前 |
Barzo · 在mysql表中查找id不唯一的漏洞 10 年前 |