SQL:连接顺序整数值

mar*_*erh 2 sql oracle

我有一个这样的列:

ID
--------
1
2
3
4
5
7
10
Run Code Online (Sandbox Code Playgroud)

我想获得以下结果集:

ID
--------
1-5
7
10
Run Code Online (Sandbox Code Playgroud)

有没有办法只用(Oracle)SQL来实现这个目的?

Gor*_*off 7

是:

select (case when min(id) < max(id)
             then cast(min(id) as varchar2(255)) || '-' || cast(max(id) as varchar2(255))
             else cast(min(id) as varchar2(255))
        end)
from (select id, id - rownum as grp
      from t
      order by id
     ) t
group by grp
order by min(id);
Run Code Online (Sandbox Code Playgroud)

是一个演示它的SQL小提琴.

查询背后的想法是rownum从数字序列中减去导致常数.您可以使用常量进行分组.