2016-11-11 2 views
0

Мне нужно найти средний размер (среднее число сотрудников) всех групп (работодателей), с которыми мы работаем в месяц за последние десять лет.Средний размер группы в месяц За предыдущие десять лет

Поэтому у меня нет проблем с получением среднего размера группы за каждый месяц. В течение текущего месяца я могу использовать:

Select count(*) 
from Employees EE 
join Employers ER on EE.employerid = ER.employerid 
group by ER.EmployerName 

Это даст мне список количества сотрудников в каждой группе. Затем я могу скопировать и вставить столбец в excel, чтобы получить средний показатель за текущий месяц.

За предыдущий месяц я хочу исключить всех сотрудников, которые были добавлены после этого месяца. У меня также есть запрос на это:

Select count(*) 
from Employees EE 
join Employers ER on EE.employerid = ER.employerid 
where EE.dateadded <= DATEADD(month, -1,GETDATE()) 
group by ER.EmployerName 

Это исключает всех сотрудников, которые были добавлены в этом месяце. Я могу продолжать это на протяжении всего десятилетия, но я знаю, что есть лучший способ сделать это. У меня нет проблем с этим запросом 120 раз, копирование и вставка результатов в excel для вычисления среднего значения. Тем не менее, я бы лучше изучил более эффективный способ сделать это.

Другой вопрос, я не могу сделать следующее, кто знает путь вокруг него:

Select avg(count(*)) 

Заранее спасибо, ребята !!

Редактировать: Сотрудники, которые были прекращены, могут быть найдены следующим образом. NULL - это сотрудники, которые в настоящее время работают.

Select count(*) 
from Employees EE 
join Employers ER on EE.employerid = ER.employerid 
join Gen_Info gne on gne.id = EE.newuserid 
where EE.dateadded <= DATEADD(month, -1,GETDATE()) 
and (gne.TerminationDate is NULL OR gen.TerminationDate < DATEADD(day, -14,GETDATE()) 
group by ER.EmployerName 
+2

Я действительно надеюсь, что вам не нужно делать это в mySQL, oracle и SQL-сервере ... что это как логика даты для каждого. Также некоторые примеры данных с ожидаемыми результатами помогут улучшить вопрос. – xQbert

+0

синтаксис ищет mssql – Kacper

+1

что о сотрудниках, которые оставляют работодателя? Вы показываете нам, как определить, когда они будут добавлены, но не как распознать, когда они будут удалены. Если они уйдут, и они больше не находятся в таблице Employees, то вы никогда не сможете получить точный средний показатель, потому что вы никогда не будете считать сотрудников, которые были когда-то заняты – Matt

ответ

0

Вы после запроса, который показывает количество по годам и месяцам, они были добавлены? если это так кажется довольно прямолинейным.

это используется функция даты mySQL Год & месяц.

Select AVG(cnt) FROM (
    Select count(*) cnt, Year(dateAdded), Month(dateAdded) 
    from System_Users su 
    join system_Employers se on se.employerid = su.employerid 
    group by Year(dateAdded), Month(dateAdded)) B 

Внутренние счетчики запросов и вспыхнет отсчеты от года и месяца Затем оберните, что в запросе, чтобы показать Средн.

- 2-я попытка, но я мозг FriDay'd.

Используется выражение Common Table Expression (CTE) для генерации набора данных для подсчета по годам, месяцам сотрудников, а затем среднее значение по месяцам. , если это не то, что вы после, образцы данных с ожидаемыми результатами помогут лучше сформулировать вопрос, и я могу сделать предположения о том, что вам нужно/нужно.

With CTE AS (
Select Year(dateAdded) YR , Month(DateAdded) MO, count(*) over (partition by Year(dateAdded), Month(dateAdded) order by DateAdded Asc) as RunningTotal 
from System_Users su 
join system_Employers se on se.employerid = su.employerid 
Order by YR ASC, MO ASC) 
Select avg(RunningTotal), mo from cte; 
+0

Спасибо за ваш ответ! Я не собираюсь рассчитывать, когда был добавлен сотрудник.Скорее всего, мне нужно найти средний размер группы в месяц на всем пути до 2006 года. – muhqa

+0

Так что это звучит так, как будто вам нужно работать «Среднее» по месяцам/годам, которое может быть выполнено аналитиком ... – xQbert

+0

Я не думаю «текущее среднее» именно то, что я ищу. При вычислении среднего и нового значения добавляется старое значение. Например, скользящая средняя шестимесячных продаж может быть рассчитана путем учета среднего объема продаж с января по июнь, затем среднего значения с февраля по июль, затем с марта по август и т. Д. Например , текущее среднее из 6-месячных продаж можно рассчитать, взяв среднюю продажу с января по июнь, затем средние значения с февраля по июль. Я не хочу бросать какие-либо данные, так как Ян был сброшен в моем примере. – muhqa

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