如何使用SQL查找具有预定义最小间隙大小的所有“间隙”?

问题描述 投票:0回答:1

我阅读了很多有关查找间隙的好答案(hereherehere,但是我仍然不知道如何找到最小预定义尺寸的间隙。

在我的情况下,空白是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 |      
+-----------+----+
sql postgresql gaps-and-islands
1个回答
0
投票

您可以确定差距以及起点和终点。要确定差距,请计算非差距的数量并进行汇总:

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

例如。

这总结了差距,每行一个。对于我来说,这实际上似乎比每行单独一行有用。

© www.soinside.com 2019 - 2024. All rights reserved.