Всем привет
Прочитал несколько тем на форуме, посвященные моей проблеме
вот например http://www.sql.ru/forum/553845/kak-vychislit-raznicu-v-datah
но ответа так пока и не нашел.
Если кто подскажет буду очень благодарен.
Есть кадровая программа, уже давно написанная. Возникла необходимость её немного дописать.
Возникла необходимость посчитать стаж работы сотрудника в компании.
Вроде все легко, я быстро написал дополнение и получил вроде нужный результат, но оказалось не все так просто.
Дело в том что некоторые сотрудники увольнялись и возвращались в компанию, и по ним у меня неправильный подсчет стажа.
Все события "принят на работу" "фактически уволен" и т.п. пишутся в таблицу tbl_PersonnelHistory:
PH_ID PERSONNEL_ID DATE ACTION
1654 381 2015-08-19 00:00:00.000 0
1761 381 2016-04-28 00:00:00.000 6
1928 381 2017-06-06 00:00:00.000 0
выше показал результат выборки с такого запроса:
SELECT *
FROM tbl_PersonnelHistory
WHERE PERSONNEL_ID=381 AND [ACTION] IN (0,6)
PERSONNEL_ID=381 - Сотрудник
[ACTION] 0 - принят на работу
6 - фактически уволен
нужен такой запрос чтобы посчитать стаж от события ACTION=0 до ACTION=6 от второго события ACTION=0 по текущую дату и при этом исключить время от события ACTION=6 до второго ACTION=0
все что я придумал это написать процедуру и вызывать её в запросе, а самой процедуре уже выполнять "сложные" вычисления, определять очередность событий по номеру PH_ID и определять какой из ACTION выше или ниже другого и потом это все считать
а вот как это все написать одним запросом никак не могу понять, если кто меня понял и готов подсказать большое вам заранее спасибо!
Прочитал несколько тем на форуме, посвященные моей проблеме
вот например http://www.sql.ru/forum/553845/kak-vychislit-raznicu-v-datah
но ответа так пока и не нашел.
Если кто подскажет буду очень благодарен.
Есть кадровая программа, уже давно написанная. Возникла необходимость её немного дописать.
Возникла необходимость посчитать стаж работы сотрудника в компании.
Вроде все легко, я быстро написал дополнение и получил вроде нужный результат, но оказалось не все так просто.
Дело в том что некоторые сотрудники увольнялись и возвращались в компанию, и по ним у меня неправильный подсчет стажа.
Все события "принят на работу" "фактически уволен" и т.п. пишутся в таблицу tbl_PersonnelHistory:
PH_ID PERSONNEL_ID DATE ACTION
1654 381 2015-08-19 00:00:00.000 0
1761 381 2016-04-28 00:00:00.000 6
1928 381 2017-06-06 00:00:00.000 0
выше показал результат выборки с такого запроса:
SELECT *
FROM tbl_PersonnelHistory
WHERE PERSONNEL_ID=381 AND [ACTION] IN (0,6)
PERSONNEL_ID=381 - Сотрудник
[ACTION] 0 - принят на работу
6 - фактически уволен
нужен такой запрос чтобы посчитать стаж от события ACTION=0 до ACTION=6 от второго события ACTION=0 по текущую дату и при этом исключить время от события ACTION=6 до второго ACTION=0
все что я придумал это написать процедуру и вызывать её в запросе, а самой процедуре уже выполнять "сложные" вычисления, определять очередность событий по номеру PH_ID и определять какой из ACTION выше или ниже другого и потом это все считать
а вот как это все написать одним запросом никак не могу понять, если кто меня понял и готов подсказать большое вам заранее спасибо!