2017-01-30 6 views
0

Меня спрашивают предоставить некоторую отчетность о Стартере/Либерах на основе информации, которую мы уже собираем.Количество запросов на каждый год, основанный на одной дате

Я пытаюсь выяснить, может ли это сделать сам MySQL, или мне нужно будет сделать несколько вызовов.

На самом простом уровне наша структура данных:

ID psName  dtStart  dtLeave 

(Это производится из нескольких таблиц, которые возят в Office, статусе и т.д., которые мы могли бы использовать для более сложных запросов)

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

SELECT COUNT(*) FROM 
(
    SELECT ID, psName, dtStart, dtLeave 
    FROM people 
) st 
WHERE (dtStart <= "2016-06-04") 
AND (dtLeave >= "2016-06-04" OR dtLeave IS NULL) 

Я хотел бы иметь возможность кормить в дату, например «2016-04-06» в d получить список список отсчетов (либо в виде столбцов или строк) для этой даты исторически т.е.

6/4/2016 200 
6/4/2015 175 
6/4/2014 150 
6/4/2014 125 
6/4/2013 100 

ли это имеет смысл, и если да, то возможно ли это?

+0

вы имеете в виду группу в год? – McNets

+0

Да - мне хотелось бы, чтобы число людей, работающих на, скажем, «6 апреля» каждый год –

ответ

1

Обратите внимание, что даты начала и окончания нет, этот запрос будет проверять все записи в таблице.

В самом деле, вы можете уменьшить свой запрос:

SELECT YEAR(dtStart) as 'year', COUNT(*) FROM 
FROM people 
WHERE MONTH(dStart) = 4 AND DAY(dStart) = 6 
GROUP BY YEAR(dtStart); 

UPDATE

Чтобы получить людей, занятых на выбранный период:

SET @SelectedDate = '2016-04-06'; 

SELECT YEAR(dStart), COUNT(*), @SelectedDate FROM 
(
    SELECT ID, psName, dtStart, dtLeave 
    FROM people 
    WHERE DATE_FORMAT(dtStart, '%m%d') <= DATE_FORMAT(@SelectedDate, '%m%d') 
     AND DATE_FORMAT(dtleave, '%m%d') >= DATE_FORMAT(@SelectedDate, '%m%d') 
) st 
GROUP BY YEAR(dStart); 
+0

Это намного лучше, чем мне удалось придумать, но только возвращает количество людей, которые начали * ON * 6 апреля для каждый год. Не кто-нибудь, кто начинал или до этой даты, а оставил после него то, что дает оригинал –

+0

Ну, вы сказали: '' 6 апреля 'каждый год', но позвольте мне отредактировать – McNets

+0

Извините - это означало любого, кто начал до этой даты каждый год и не ушел. «При трудоустройстве», а не «нанято на» –

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