Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Посчитать стаж сотрудника за исключением диапазона
|
|||
|---|---|---|---|
|
#18+
Всем привет Прочитал несколько тем на форуме, посвященные моей проблеме вот например 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 выше или ниже другого и потом это все считать а вот как это все написать одним запросом никак не могу понять, если кто меня понял и готов подсказать большое вам заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 17:38 |
|
||
|
Посчитать стаж сотрудника за исключением диапазона
|
|||
|---|---|---|---|
|
#18+
Ackep, Если совсем тупо: row_number() over(partiton by id_personsl,action order by date) и будет тебе от 1-0 до 1-6 ... n - 0 до n - 6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 17:49 |
|
||
|
Посчитать стаж сотрудника за исключением диапазона
|
|||
|---|---|---|---|
|
#18+
Ackep, вчера же только обсуждали ???? Сколько можно-то? причем, твоя задача даже ещё проще - у тебя уже даны точки смены состояний, а не диапазоны их действия. Стало быть, разворота диапазонов в точки делать не надо. только собрать правильные диапазоны по точкам, и всё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 18:27 |
|
||
|
Посчитать стаж сотрудника за исключением диапазона
|
|||
|---|---|---|---|
|
#18+
А что если посчитать по зарплатным ведомостям ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2018, 18:49 |
|
||
|
Посчитать стаж сотрудника за исключением диапазона
|
|||
|---|---|---|---|
|
#18+
Прям эпидемия пошла... Безопасно для homo sapiens и felis silvestris catus Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:28 |
|
||
|
Посчитать стаж сотрудника за исключением диапазона
|
|||
|---|---|---|---|
|
#18+
Всем кто откликнулся большое спасибо. Очень выручили! Руслан, немного изменил ваш запрос т.к. вложенный WITH не проходит. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 13:22 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39590305&tid=1690328]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 349ms |

| 0 / 0 |
