Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Пн Дек 05, 2016 16:09 Заголовок сообщения: История изменения должностей |
|
|
Необходимо создать запрос, выводящий историю изменения должностей работников (с даты, по дату, должность). Вариант с min max не подойдет т к некоторые работники могут возвращаться на свои должности. |
|
Вернуться к началу |
|
|
NewAge
Зарегистрирован: 11.06.2010 Сообщения: 108
|
Добавлено: Чт Дек 15, 2016 16:04 Заголовок сообщения: |
|
|
Код: | with tab_cte as (
select distinct
p.num_tab, c.full_name, p.in_date,
(case isnull(pc_prv.date_depart, '1900-01-01') when '1900-01-01' then p.in_date else dateadd(day, 1, pc_prv.date_depart) end) as date_trans,
(case isnull(pc_nxt.date_trans, '2099-01-01') when '2099-01-01' then p.out_date else dateadd(day, -1, pc_nxt.date_trans) end) as date_depart,
a.name_appoint + isnull(' ' + cl.text_prof, '') as name_appoint
from
people as p join card as c on c.auto_card = p.auto_card
join pr_current as pc_cur on pc_cur.pid = p.pid
join appointments as a on a.code_appoint = pc_cur.code_appoint
left join pclass as cl on cl.code_prof = pc_cur.w_class
left join pr_current as pc_prv on pc_prv.prid = (
select top(1) pc1.prid from pr_current as pc1 where pc1.pid = p.pid and pc1.date_trans < pc_cur.date_trans and (pc1.code_appoint != pc_cur.code_appoint or isnull(pc1.w_class, 0) != isnull(pc_cur.w_class, 0)) order by pc1.date_trans desc
)
left join pr_current as pc_nxt on pc_nxt.prid = (
select top(1) pc2.prid from pr_current as pc2 where pc2.pid = p.pid and pc2.date_trans > pc_cur.date_trans and (pc2.code_appoint != pc_cur.code_appoint or isnull(pc2.w_class, 0) != isnull(pc_cur.w_class, 0)) order by pc2.date_trans
)
where
cast(getdate() as date) between p.in_date and p.out_date
)
select * from tab_cte order by full_name, in_date, date_trans |
|
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|