Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

В каком возрасте отдают ребёнка в ясли?

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ШКК (Штатно-Кадровый контур)
Предыдущая тема :: Следующая тема  
Автор Сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Вт Сен 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)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
zhenya17



Зарегистрирован: 04.02.2009
Сообщения: 190
Откуда: Кемерово

СообщениеДобавлено: Вт Сен 06, 2011 19:05    Заголовок сообщения: Ответить с цитатой

Ничего так у вас статистика! Smile
Запрос я бы по-другому делала, без юнионов.
Сначала сделала бы вложенный запрос, который определяет маму+ребёнка+максимальную дату окончания отпуска, т.е. что-то вроде
Код:
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 писал(а):
Ничего так у вас статистика! Smile
Запрос я бы по-другому делала, без юнионов.
Сначала сделала бы вложенный запрос, который определяет маму+ребёнка+максимальную дату окончания отпуска, т.е. что-то вроде
Код:
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
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Ср Сен 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)

Мне нужно собрать как можно больше такой статистики. Так что если не сложно, прошу всех кто это читает запустить селект на своей базе и прислать результат мне на почту. Эта информация нужна для диссертации.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Чт Сен 08, 2011 12:03    Заголовок сообщения: Ответить с цитатой

Спасибо! Мой адрес rebel25@yandex.ru
Да, будущим датам окончания нельзя верить.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
zhenya17



Зарегистрирован: 04.02.2009
Сообщения: 190
Откуда: Кемерово

СообщениеДобавлено: Чт Сен 08, 2011 12:35    Заголовок сообщения: Ответить с цитатой

Отправила.
И ещё подумала, что не только в датах может быть дело Smile
Например, у нас, по крайней мере, 2 человека, которых я знаю, получают пособие и работают одновременно на неполном рабочем дне. Поскольку в запросе у Вас идёт cmothers, то этот момент не учитывается, т.к. дата окончания выплаты пособия остаётся прежней, а реально - человек работает. А в общей массе таких людей больше...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Чт Сен 08, 2011 19:00    Заголовок сообщения: Ответить с цитатой

Да, но думаю сильно это результат не исказит.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
zhenya17



Зарегистрирован: 04.02.2009
Сообщения: 190
Откуда: Кемерово

СообщениеДобавлено: Пт Сен 09, 2011 06:37    Заголовок сообщения: Ответить с цитатой

Думаю, как раз, очень сильно исказят.
Раньше нельзя было получать пособие и зарплату одновременно, но пару-тройку лет назад разрешили выходить на неполный график, причём насолько он неполный нигде не оговаривается. Т.е. достаточно, чтобы у женщины была рабочая неделя на полчаса короче и уже в этом случае допустимо получение пособия при выходе на работу.
В связи с этим, сейчас большинство женщин выходит на работу гораздо раньше, т.к. кормить ребёнка на то пособие, которое есть не очень-то получается. Тем более, если пособие начислено по белой зарплате, то оно вообще зачастую минимальное, а не те 40%, которые получала мамочка, работая на чёрной з/п. Это российская действительность и с ней стоит считаться. Я точно знаю, что у нас на предприятии вал таких декретниц, которые выходят досрочно, я написала просто, что знаю только двоих из них. Но по факту - их точно больше.
Опять же, у меня вот жена брата вышла на работу, в июле, когда дочке исполнилось 4 месяца, а вчера - подруга вышла на работу, её дочке 7 месяцев. Сейчас преждевременный выход на работу норма, а не исключение. К сожалению, на сегодняшний не каждый мужчина может/хочет в одиночку прокормить жену и детей.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Пн Сен 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)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Вт Сен 13, 2011 13:02    Заголовок сообщения: Ответить с цитатой

Да, я не учитывал отзывы, спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ШКК (Штатно-Кадровый контур) Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU