getting the range of a number column(min/max) if t

2019-07-21 11:01发布

问题:

How would I query the range of a number column if the number ends somewhere then picks up again at a higher number?

If I had a column like:

Number
-------
 1
 2
 3
 4
 5
 11
 12
 13

How can I return a result like

Min | Max
----------
 1  |  5
 11 |  13

回答1:

;WITH CTE AS
(
 SELECT 
   Number, 
   Number - dense_rank() over (order by Number) grp
 FROM yourtable
)
SELECT min(Number) min, max(Number) max
FROM CTE
GROUP BY grp

FIDDLE



回答2:

Try this:

select t1.num, (select min(num) from table t3
                where t3.num >= t1.num
                  and t3.num + 1 not in (select num from table))
from table t1
where not exists (select * from table t2
                  where t1.num - 1 = t2.num)

The where clause finds only min values for different ranges.

The sub-select finds lowest value with no value + 1 available.



回答3:

Another approach:

select n1.number as min,min(n2.number) as max
from table n1 
JOIN table n2 ON n1.number<n2.number 
AND NOT EXISTS (select 1 from number where number = n1.number-1)
AND  NOT EXISTS (select 1 from number where number=n2.number+1)
group by n1.number
order by n1.number