需要在oracle中找到10年间差异的记录数

时间:2017-07-28 21:18:50

标签: sql oracle

我的数据集的出生日期从1900年到2017年。我想在10年的差距中看到记录数。示例:输出应如下所示: 从年开始计算 1900-1910 100 1910-1920 200。

任何帮助都将非常感激。

1 个答案:

答案 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

添加了第二个解决方案