2014-02-18 3 views
1

Я хочу, чтобы найти число работников за каждый месяц в диапазоне дат - январь 2012 по январь 2013 г.запрос, чтобы найти число работников за месяц

историю Пример:

  • Мы 500 сотрудников наемный до того 2012
  • января 2012 - 30 сотрудников были наняты
  • февраля - 20 сотрудников покинули компанию -Март - ничего не изменилось

Я хочу привести как,

Jan 2012 530 
Feb 2012 510 
March 2012 550 
... 

В employees таблице у меня есть столбцы:

id 
employee_name 
date_started 
date_terminated 
employee_status_type /* true for current employees, false otherwise */ 

ответ

1
create table employees (id int, date_started date, date_terminated date); 

insert into employees values 
    (1,'2012-01-01','2012-07-01'), 
    (2,'2012-11-01',NULL), 
    (3,'2010-01-01','2012-02-10'); 

with 

time_space as (
    select 
    gs::date as bom, 
    (gs + interval '1 month' - interval '1 day')::date as eom 
    from 
    generate_series('2012-01-01'::date,'2013-01-01'::date, '1 month') gs 

) 

select 
    ts.bom, 
    coalesce(x.employees,0) as employees 
from 
    time_space ts 
    left join (
    select 
     bom, 
     count(*) as employees 
    from 
     time_space ts 
     join employees e on (coalesce(e.date_terminated,'3000-01-01'::date) >= ts.bom and e.date_started <= ts.eom) 
    group by 
     bom) x using (bom) 

SQLFiddle

Смежные вопросы