我的数据集的出生日期从1900年到2017年。我想在10年的差距中看到记录数。示例:输出应如下所示: 从年开始计算 1900-1910 100 1910-1920 200。
任何帮助都将非常感激。
答案 0 :(得分:0)
一种方法是提取年份,将其除以10,将其除以,乘以10并将其除以
--test data
create table a ( MY_DATE DATE ) ;
insert into a select to_date('01-01-1900','DD-MM-YYYY')+dbms_random.value(1,40000) from dual connect by level < 5000;
--example of grouping
select '['||
FLOOR(EXTRACT(YEAR FROM MY_DATE)/10)*10||'-'||
((FLOOR(EXTRACT(YEAR FROM MY_DATE)/10)*10)+10)||'[',
COUNT(*)
FROM a GROUP BY FLOOR(EXTRACT(YEAR FROM MY_DATE)/10)*10
order by FLOOR(EXTRACT(YEAR FROM MY_DATE)/10)*10
或使用truncs
select '['||
trunc(EXTRACT(YEAR FROM MY_DATE),-1)||'-'||(trunc(EXTRACT(YEAR FROM MY_DATE),-1)+10)||'[',
COUNT(*)
FROM a GROUP BY trunc(EXTRACT(YEAR FROM MY_DATE),-1)
order by trunc(EXTRACT(YEAR FROM MY_DATE),-1)
结果:
RANGE CNT
[1900-1910[ 2518
[1910-1920[ 3882
[1920-1930[ 884
[1930-1940[ 944
[1940-1950[ 867
[1950-1960[ 909
[1960-1970[ 936
[1970-1980[ 912
[1980-1990[ 896
[1990-2000[ 917
[2000-2010[ 903
请注意@ Mathguy的重要评论。我在范围之前和之后添加了符号,以指定包含下限,并排除上限。
编辑:在@ Wernfried Domscheit&#39;之后改变了围棋结构。评论 Edit2:使用trunc
添加了第二个解决方案