我阅读了很多有关查找间隙的好答案(here,here,here,但是我仍然不知道如何找到最小预定义尺寸的间隙。
在我的情况下,空白是HE没有名字顺序的条目。
我还需要像表中的示例一样在表格的开头查找空白。
任何人都可以提供漂亮而干净的SQL语句,可以轻松地对其进行更改以获取预定义的最小间隙大小?
具有预期输出的示例:
+-----------+----+ +----------------+ +----------------+ +----------------+
| name | HE | | GAPS >= 1 | | GAPS >= 2 | | GAPS >= 3 |
+-----------+----+ +-----------+----+ +-----------+----+ +-----------+----+
| | 1 | | name | HE | | name | HE | | name | HE |
| JohnDoe01 | 2 | +-----------+----+ +-----------+----+ +-----------+----+
| JohnDoe02 | 3 | | | 1 | | | 4 | | | 12 |
| | 4 | | | 4 | | | 5 | | | 13 |
| | 5 | | | 5 | | | 9 | | | 14 |
| JohnDoe03 | 6 | | | 9 | | | 10 | +-----------+----+
| JohnDoe04 | 7 | | | 10 | | | 12 |
| JohnDoe05 | 8 | | | 12 | | | 13 |
| | 9 | | | 13 | | | 14 |
| | 10 | | | 14 | +-----------+----+
| JohnDoe06 | 11 | +-----------+----+
| | 12 |
| | 13 |
| | 14 |
| JohnDoe07 | 15 |
+-----------+----+
您可以确定差距以及起点和终点。要确定差距,请计算非差距的数量并进行汇总:
select min(he), max(he), count(*) as size
from (select t.*, count(name) over (order by he) as grp
from t
) t
where name is null
group by grp;
然后您可以使用having
进行过滤:
having count(*) >= 2
例如。
这总结了差距,每行一个。对于我来说,这实际上似乎比每行单独一行有用。