Oracle: сгруппировать данные по десятилетиям - PullRequest
0 голосов
/ 07 мая 2018

У меня есть таблица клиентов с подробностями ниже:

DOB - это тип данных даты в Oracle

Customer ID   Name            DOB
1             Babu          20-07-1987
2             MohanLal      20-04-1962
3             Mammootty     20-04-1961

Желаемый результат:

Decade start    Decade end     No_of_customers
1960-01-01       1969-12-31            2
1980-01-01       1989-12-31            1

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете попробовать ниже SQL-запрос:

 SELECT 
    substr(TO_CHAR(DOB,'YYYY-MM-DD'),1,3)||'0-01-01' as DECADE_START,
    substr(TO_CHAR(DOB,'YYYY-MM-DD'),1,3)||'9-12-31' as DECADE_END,
    count(1) AS NO_OF_CUSTOMERS
    FROM 
    customer_table
    group by 
    substr(TO_CHAR(DOB,'YYYY-MM-DD'),1,3)
0 голосов
/ 07 мая 2018

Использовать функцию усечения с правильным форматированием даты:

select 10*trunc(to_char(DOB,'yyyy')/10) "Decade", count(1) "No_of_customers"
  from tab
 group by 10*trunc(to_char(DOB,'yyyy')/10)
 order by 1;

Я недавно понял, что вы последний раз редактировали. В связи с этим вы можете использовать следующее:

with t as
(
 select trunc(to_date(10*trunc(to_char(DOB,'yyyy')/10),'yyyy'),'year')   Decade_Start,
        trunc(to_date(10*ceil(to_char(DOB,'yyyy')/10),'yyyy'),'year')-1  Decade_End
   from tab
 )
 select t.*, count(1) No_of_customers 
   from t  
 group by Decade_Start, Decade_End
 order by 1;

Демонстрация SQL Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...