getting the range of a number column(min/max) if there are missing numbers in between

自古美人都是妖i 提交于 2020-01-15 04:53:29

问题


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


来源:https://stackoverflow.com/questions/29073753/getting-the-range-of-a-number-columnmin-max-if-there-are-missing-numbers-in-be

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!