我想确定的2个类别的范围。 A类和B类A开始从1至15,B开始从16到31然后再次开始从32到40,现在如果运行此查询
select min(range), max(range)
from table
group by category
order by category
它给了我范围A类从1到40和B类为16〜31。我想打破Range和希望看到的结果
Category A 1 to 15
Category B 16 to 31
Category A 32 to 40
我怎么做? 我需要一个第三列? 我知道,如果我有新的类别第三列分别让CDE说,我可以通过这些组和得到的结果。 但我不知道该怎么做。
请帮助我。
由于-Adeel
假设你正在试图打破类别成由连续整数的组,那么下面的工作:
select category, diff, min(range), max(range)
from
(
select category, range,
(range - row_number() over (partition by category order by range)) as diff
from table
) t
group by category
order by 1, 3
此查询基于这样的观察,对一类特定分组内,这些数字依次增加。 因此,减去整数的序列将导致恒定的,然后可将其用于识别该特定的范围。
Row_Number()
是一个标准的SQL函数,所以它是在大多数数据库可用。
这听起来像一个递归CTE应该为你工作,但它取决于你的RDBMS如何这可能是工作(如果它甚至支持),但你很可能做一些增量计数的,可以用作每个事半功倍拼凑起来,直到最大限制。 如果你让我们知道了RDBMS我可以提供一个例子。