Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Вт Сен 06, 2011 13:17 Заголовок сообщения: В каком возрасте отдают ребёнка в ясли? |
|
|
Доброго времени суток
Мне нужно получить статистику (написать селект), который выдаст возраст детей на момент выхода матерей из отпуска по уходу за этими детьми, например в виде "Таб№", "Кол-во месяцев", "дата выхода".
При этом отпуска могут быть двух типов - до 1.5 и до 3 лет и они могут идти в любом порядке - как один, так и два, три подряд - тогда нужно получить возраст на дату окончания последнего. Так же желательно учесть момент ухода за несколькими детьми одновременно.
Я попытался написать сам, но боюсь мой селект выдаёт искаженную картину по тем кто брал несколько отпусков подряд, а потом один отпуск по уходу за другим ребенком. Помогите написать.
select p.num_tab,datediff(month,r.Date_birth,l.tod),l.tod from cmothers c join PR_RELATIV r on (c.ID_PR_RELATIV=r.PR_REL_NUM) join pr_leave l on (l.auto_leave=c.auto_leave)
join people p on (p.pid=c.pid)
where who_code in (5,6) and l.pid not in
(
select l.pid from cmothers c join PR_RELATIV r on (c.ID_PR_RELATIV=r.PR_REL_NUM) join pr_leave l on (l.auto_leave=c.auto_leave)
join people p on (p.pid=c.pid)
where who_code in (5,6) and exists (select * from pr_leave where tod=dateadd(day,-1,l.fromd) and pid=l.pid and code_leave in (9,10))
and l.code_leave in (9,10)
)
and l.code_leave in (9,10)
union all
--бравшие несколько отпусков подряд
select p.num_tab,datediff(month,r.Date_birth,l.tod),l.tod from cmothers c join PR_RELATIV r on (c.ID_PR_RELATIV=r.PR_REL_NUM) join pr_leave l on (l.auto_leave=c.auto_leave)
join people p on (p.pid=c.pid)
where who_code in (5,6) and exists (select * from pr_leave where tod=dateadd(day,-1,l.fromd) and pid=l.pid and code_leave in (9,10))
and l.code_leave in (9,10) |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Вт Сен 06, 2011 19:05 Заголовок сообщения: |
|
|
Ничего так у вас статистика!
Запрос я бы по-другому делала, без юнионов.
Сначала сделала бы вложенный запрос, который определяет маму+ребёнка+максимальную дату окончания отпуска, т.е. что-то вроде
Код: | select c.pid, c.ID_PR_RELATIV, max(l.tod)
from cmothers c
join pr_leave l on l.auto_leave=c.auto_leave
where l.code_leave in (9,10)
group by c.pid, c.ID_PR_RELATIV |
А сверху обернула бы этот запрос джойном с pr_relatives и нашла разницу.
БОССа сейчас под рукой нет, чтобы более точный запрос написать, но логику, надеюсь, передать удалось. |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Вт Сен 06, 2011 19:06 Заголовок сообщения: |
|
|
zhenya17 писал(а): | Ничего так у вас статистика!
Запрос я бы по-другому делала, без юнионов.
Сначала сделала бы вложенный запрос, который определяет маму+ребёнка+максимальную дату окончания отпуска, т.е. что-то вроде
Код: | select c.pid, c.ID_PR_RELATIV, max(l.tod)
from cmothers c
join pr_leave l on l.auto_leave=c.auto_leave
where l.code_leave in (9,10)
group by c.pid, c.ID_PR_RELATIV |
А сверху обернула бы этот запрос джойном с pr_relatives и нашла разницу в датах.
БОССа сейчас под рукой нет, чтобы более точный запрос написать, но логику, надеюсь, передать удалось. |
|
|
Вернуться к началу |
|
|
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Ср Сен 07, 2011 12:05 Заголовок сообщения: |
|
|
Спасибо, в итоге получилось так:
select date_birth,m,datediff(month,Date_birth,m) from
(
select p.auto_card, c.pid, c.ID_PR_RELATIV, max(c.tod) m
from cmothers c join people p on (p.pid=c.pid) --расчетчики часто ставят в cmothers не правильтый отпуск если их много, поэтому возраст считал на дату окончания выплат
where isnull(c.ID_PR_RELATIV,0)!=0
group by c.pid, c.ID_PR_RELATIV, p.auto_card
) as t left join PR_RELATIV r on (r.PR_REL_NUM=t.ID_PR_RELATIV)
where who_code in (5,6)
Мне нужно собрать как можно больше такой статистики. Так что если не сложно, прошу всех кто это читает запустить селект на своей базе и прислать результат мне на почту. Эта информация нужна для диссертации. |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Ср Сен 07, 2011 20:59 Заголовок сообщения: |
|
|
Могу выслать выборку по нашим 260 декретницам, напиши, куда.
Но я уже подумала, что запрос этот очень не точный... Он выдаёт примерно следующее:
15 человек выходят ранее 18 месяцев
197 человек выходят через 18 месяцев
2 человека выходят через 27 и 28 месяцев
46 человек выходят через 36 месяцев
Кадровики же сразу оформляют отпуск либо до 1.5, либо до 3 лет. Поэтому не факт, что все, у кого сейчас отпуски оформлены до 2012-2014гг. не выйдут раньше. Думаю, будет правильнее ставить в выборке ограничение, что дата выхода меньше текущей.
P.S. Для админов форума: Было бы неплохо иметь возможность крепить к сообщениям хотя бы небольшие файлы. |
|
Вернуться к началу |
|
|
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Чт Сен 08, 2011 12:03 Заголовок сообщения: |
|
|
Спасибо! Мой адрес rebel25@yandex.ru
Да, будущим датам окончания нельзя верить. |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Чт Сен 08, 2011 12:35 Заголовок сообщения: |
|
|
Отправила.
И ещё подумала, что не только в датах может быть дело
Например, у нас, по крайней мере, 2 человека, которых я знаю, получают пособие и работают одновременно на неполном рабочем дне. Поскольку в запросе у Вас идёт cmothers, то этот момент не учитывается, т.к. дата окончания выплаты пособия остаётся прежней, а реально - человек работает. А в общей массе таких людей больше... |
|
Вернуться к началу |
|
|
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Чт Сен 08, 2011 19:00 Заголовок сообщения: |
|
|
Да, но думаю сильно это результат не исказит. |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Пт Сен 09, 2011 06:37 Заголовок сообщения: |
|
|
Думаю, как раз, очень сильно исказят.
Раньше нельзя было получать пособие и зарплату одновременно, но пару-тройку лет назад разрешили выходить на неполный график, причём насолько он неполный нигде не оговаривается. Т.е. достаточно, чтобы у женщины была рабочая неделя на полчаса короче и уже в этом случае допустимо получение пособия при выходе на работу.
В связи с этим, сейчас большинство женщин выходит на работу гораздо раньше, т.к. кормить ребёнка на то пособие, которое есть не очень-то получается. Тем более, если пособие начислено по белой зарплате, то оно вообще зачастую минимальное, а не те 40%, которые получала мамочка, работая на чёрной з/п. Это российская действительность и с ней стоит считаться. Я точно знаю, что у нас на предприятии вал таких декретниц, которые выходят досрочно, я написала просто, что знаю только двоих из них. Но по факту - их точно больше.
Опять же, у меня вот жена брата вышла на работу, в июле, когда дочке исполнилось 4 месяца, а вчера - подруга вышла на работу, её дочке 7 месяцев. Сейчас преждевременный выход на работу норма, а не исключение. К сожалению, на сегодняшний не каждый мужчина может/хочет в одиночку прокормить жену и детей. |
|
Вернуться к началу |
|
|
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Пн Сен 12, 2011 12:37 Заголовок сообщения: |
|
|
Да, нужно считать датой выхода дату окончания отпуска по уходу. У меня кадровики закрывают отпуск раньше, а расчетчики продолжают платить.
Правда есть случаи когда в отпуске по уходу рожают второго ребенка. Тогда отпуск по уходу закрывается хотя работница фактически не выходит на работу. Как корректно вывести такие случаи не знаю, хотя их то уж точно не много.
Я сравнил общее количество месяцев с предыдущим результатом, получилось на 8 процентов меньше. Так что не так уж и многие выходят работать раньше.
select date_birth,m,datediff(month,Date_birth,m) from
(
select p.auto_card, c.pid, c.ID_PR_RELATIV, max(r.tod) m
from cmothers c join people p on (p.pid=c.pid) join pr_leave r on (c.auto_leave=r.auto_leave)
where isnull(c.ID_PR_RELATIV,0)!=0
group by c.pid, c.ID_PR_RELATIV, p.auto_card
) as t left join PR_RELATIV r on (r.PR_REL_NUM=t.ID_PR_RELATIV)
where who_code in (5,6) |
|
Вернуться к началу |
|
|
zhenya17
Зарегистрирован: 04.02.2009 Сообщения: 190 Откуда: Кемерово
|
Добавлено: Вт Сен 13, 2011 08:53 Заголовок сообщения: |
|
|
Что-то я не поняла логики Вашего запроса с поправками на отзыв. Или что за запрос приложен в последнем сообщении?
Вот более точный запрос, который учитывает отзывы, а также отсеивает текущих декретниц, у которых пособие заканчивается позднее текущей даты и не оформлен отзыв.
Код: | select date_birth, m, otz, r1, r2
from (
select date_birth, m, otz, datediff(month,Date_birth,m) r1, datediff(month,Date_birth,otz) r2
-- ,rep_branch_num, pid
from
(
select p.auto_card, c.pid, c.ID_PR_RELATIV, max(c.tod) m, max(pl2.fromD) otz
from cmothers c
join people p on (p.pid=c.pid) --расчетчики часто ставят в cmothers не правильтый отпуск если их много, поэтому возраст считал на дату окончания выплат
left join pr_leave pl on pl.auto_leave=c.auto_leave
left join pr_leave pl2 on pl.auto_leave=pl2.l_back
where isnull(c.ID_PR_RELATIV,0)!=0
group by c.pid, c.ID_PR_RELATIV, p.auto_card
) as t
left join PR_RELATIV r on r.PR_REL_NUM=t.ID_PR_RELATIV
where who_code in (5,6)
) ttt
where m<getdate() or (m>getdate() and otz is not null)
order by 4 |
Согласно этому запросу, у меня получились отзывы у 12% декретниц (22 из 179) из них 10% скорректировлись. У 2% корректировки не произошло, т.к. дата отзыва и дата окончания пособия примерно одинаковы (не более 14 дней разницы). |
|
Вернуться к началу |
|
|
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Вт Сен 13, 2011 13:02 Заголовок сообщения: |
|
|
Да, я не учитывал отзывы, спасибо. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|