晚上好,我有一张包含如下表格的表格:
类别ID
Cat1 1
Cat2 2
Cat1 3
Cat1 4
Cat1 5
Cat2 6
Cat2 7
我想获得如下结果
Cat1 1 - 1
Cat2 2
Cat1 3 - 5(而不是3 - 4 - 5(我需要选择列表的最小和最大值)
Cat2 6
Cat2 7
我已经开始使用查询
了SELECT类别,LISTAGG(ID,'')WITHIN GROUP(ORDER BY Category)AS desc 从表 GROUP BY类别;
如您所见,Cat1可以包含2个ID(最小和最大),但Cat2不是这种情况。
您对这个问题有所了解吗?
我希望能够清楚。
感谢。
西里尔
答案 0 :(得分:2)
您可以使用row_numbers()
执行此操作。实际上,标识一组顺序ID的id和行号之间存在差异:
select category,
(case when min(id) = max(id) then id
else min(id) || '-' || max(id)
end) as id_range
from (select t.*,
(id -
row_number() over (partition by category order by id)
) as grp
from table t
) t
group by category, grp;
答案 1 :(得分:1)
试试这个::
select category
,min(id) || (case when min(id)=max(id) then
' '
else
'-'||max(id) end) as "MIN-MAX-VALUE"
from temp
group by category;