То, что вы близко.
Но есть еще много работы.
Мы хотели, чтобы выработать условия, которые определяют, сколько сотрудников было «работать» в любой момент времени условие я бы проверить (т.е. при заданном значении временной метки.):
HireDate <= timestamp < TerminationDate
Мы 'd необходимо расширить это сравнение, так что значение NULL для TerminationDate
будет обрабатываться, как если бы это был момент времени после значение метки времени. Это достаточно легко сделать)
HireDate <= timestamp AND (timestamp < TerminationDate OR TerminationDate IS NULL
Так, что-то вроде этого:.
SELECT COUNT(1)
FROM Employees e
WHERE (:timestamp >= e.HireDate)
AND (:timestamp < e.TerminationDate OR e.TerminationDate IS NULL)
что «подсчет» значение останется тем же, и изменится только для «прокат» или «прекратить» мероприятие.
Если у нас есть отличный список всех временных меток для всех случаев «найма» и «прекращения», мы можем получить количество сотрудников в этот момент времени.
Таким образом, этот запрос будет давать нам работник рассчитывать каждый раз, когда граф работника может измениться:
SELECT t.ts AS `as_of`
, COUNT(1) AS `employee_count`
FROM Employees e
JOIN (SELECT t.TerminationDate AS ts
FROM Employees t
WHERE t.TerminationDate IS NOT NULL
GROUP BY t.TerminationDate
UNION
SELECT h.HireDate AS ts
FROM Employees h
WHERE h.HireDate IS NOT NULL
GROUP BY h.HireDate
) t
ON (t.ts >= e.HireDate)
AND (t.ts < e.TerminationDate OR e.TerminationDate IS NULL)
GROUP BY t.ts
Мы могли бы использовать этот результат (как вложенное представление) и присоединиться, что конкретный сотрудник, и получить только строки, которые имеют временную метку as_of
, которая соответствует периоду занятости для этого сотрудника. Затем просто вытащить максимум employee_count
. Нетрудно было бы идентифицировать более ранние из нескольких дат as_of
, если этот максимум employee_count
произошел несколько раз.
(Формулировка вопроса оставляет открытым вопрос, на «раннюю дату» когда-либо что работник COUNT достигли или превысили максимум того, что произошло во время сотрудников пребывания, или только самую раннюю дату в пределах сотрудников пребывания, что максимальный был достигнут. Можно получить либо результат.)
Это только один из способов подойти к проблеме.
вам просто помогли здесь: http://stackoverflow.com/questions/25866256/advanced-mysql-query, после чего вы исчезли, не приняв никакого ответа. теперь вы спрашиваете, что, вероятно, вопрос № 2 вашей домашней работы. прочитайте FAQ на этом сайте и начните показывать хорошие манеры. – Vland
ОК Я решил это самостоятельно – Khaneddy2013
Мне все равно. вы по-прежнему должны вознаграждать людей, которые помогают вам бесплатно и принимать полезные/рабочие ответы. это то, что StackOverflow о – Vland