This commit is contained in:
Ruslan 2025-04-14 15:53:53 +03:00
parent 6544157b7f
commit 58435c236a

View file

@ -51,6 +51,7 @@ ids AS (
SELECT unnest(string_to_array(nullif(trim(both '{}' from '${ARR_MC_AU}'), ''), ','))::uuid AS recruitment_id,
'Осень' AS spring_autumn
),
/*
last_status as (select recruit_id,
max(date_time) filter (where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')) max_date_time
from recruits_history
@ -65,12 +66,100 @@ registered as (
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13') -- критерии от 03.06.2025
--and rh.source is not null
),
vse AS (
*/
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '12.7', '8.2', '8.3')) max_date_time
from recruits_history
where status in ('1', '12.7', '8.2', '8.3')
group by recruit_id
),
notregistered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_n ls on rh.recruit_id=ls. recruit_id and rh.date_time=ls.max_date_time
where rh.status in ('1', '12.7', '8.2', '8.3')
--and rh.source is not null
),
recruit_data AS (
SELECT
r.id AS r_id,
ri.recruit_id AS recruit_id,
r.gender,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.current_recruitment_id AS recruitment_id,
'Весна' AS spring_autumn,
r.birth_date,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh ON rh.recruit_id=r.id
LEFT JOIN (
SELECT
ROW_NUMBER() OVER (PARTITION BY ddd.recruit_id ORDER BY COALESCE(ddd.updated_at, ddd.created_at) DESC) AS rn,
ddd.recruit_id,
ddd.hidden
FROM decision_deferment_dto ddd
WHERE ddd.hidden is true -- когда фолс отсрочка есть, когда тру или нулл - нет (для подсчета подпадающих под призыв)
) ddd ON ddd.recruit_id = r.id AND ddd.rn = 1
WHERE r.gender = 'MALE' AND
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered) and
coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Весна')
*/
r.current_recruitment_id ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Весна')
AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-04-02') and DATE (extract(year from now())-18||'-07-13'))
UNION ALL
SELECT
r.id AS r_id,
ri.recruit_id AS recruit_id,
r.gender,
--coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.current_recruitment_id AS recruitment_id,
'Осень' AS spring_autumn,
r.birth_date,
CASE
WHEN ddd.hidden IS false THEN ddd.hidden
ELSE true
END AS hidden, -- когда фолс отсрочка есть, когда тру или нулл - нет
ri.info
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
--JOIN public.recruits_history rh ON rh.recruit_id=r.id
LEFT JOIN (
SELECT
ROW_NUMBER() OVER (PARTITION BY ddd.recruit_id ORDER BY COALESCE(ddd.updated_at, ddd.created_at) DESC) AS rn,
ddd.recruit_id,
ddd.hidden
FROM decision_deferment_dto ddd
WHERE ddd.hidden is true -- когда фолс отсрочка есть, когда тру или нулл - нет (для подсчета подпадающих под призыв)
) ddd ON ddd.recruit_id = r.id AND ddd.rn = 1
WHERE r.gender = 'MALE' AND
/*
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered) and
coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Осень')
*/
r.current_recruitment_id ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Осень')
AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-10-02') and DATE (extract(year from now())-18||'-12-30'))
UNION ALL
SELECT
r.id AS r_id,
ri.recruit_id AS recruit_id,
r.gender,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
--r.current_recruitment_id AS recruitment_id,
'Весна' AS spring_autumn,
r.birth_date,
CASE
@ -81,13 +170,23 @@ vse AS (
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
LEFT JOIN (
SELECT
ROW_NUMBER() OVER (PARTITION BY ddd.recruit_id ORDER BY COALESCE(ddd.updated_at, ddd.created_at) DESC) AS rn,
ddd.recruit_id,
ddd.hidden
FROM decision_deferment_dto ddd
WHERE ddd.hidden is true -- когда фолс отсрочка есть, когда тру или нулл - нет (для подсчета подпадающих под призыв)
) ddd ON ddd.recruit_id = r.id AND ddd.rn = 1
WHERE r.gender = 'MALE' AND
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered) and
coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Весна')
AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-04-02') and DATE (extract(year from now())-18||'-07-13'))
--/*
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered) and
coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Весна')
--*/
--AND r.current_recruitment_id ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Весна')
AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-04-02') and DATE (extract(year from now())-18||'-07-13'))
AND r.current_recruitment_id is null
UNION ALL
@ -95,7 +194,8 @@ vse AS (
r.id AS r_id,
ri.recruit_id AS recruit_id,
r.gender,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
--r.current_recruitment_id AS recruitment_id,
'Осень' AS spring_autumn,
r.birth_date,
CASE
@ -106,23 +206,80 @@ vse AS (
FROM public.recruits AS r
JOIN public.recruits_info AS ri ON ri.recruit_id = r.id
JOIN public.recruits_history rh ON rh.recruit_id=r.id
LEFT JOIN public.decision_deferment_dto ddd ON ddd.recruit_id = r.id
LEFT JOIN (
SELECT
ROW_NUMBER() OVER (PARTITION BY ddd.recruit_id ORDER BY COALESCE(ddd.updated_at, ddd.created_at) DESC) AS rn,
ddd.recruit_id,
ddd.hidden
FROM decision_deferment_dto ddd
WHERE ddd.hidden is true -- когда фолс отсрочка есть, когда тру или нулл - нет (для подсчета подпадающих под призыв)
) ddd ON ddd.recruit_id = r.id AND ddd.rn = 1
WHERE r.gender = 'MALE' AND
r.id in (SELECT recruit_id FROM registered) and
rh.id in (SELECT recruit_history_id FROM registered) and
coalesce(r.current_recruitment_id,rh.current_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Осень')
AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-10-02') and DATE (extract(year from now())-18||'-12-30'))
--/*
r.id in (SELECT recruit_id FROM notregistered) and
rh.id in (SELECT recruit_history_id FROM notregistered) and
coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Осень')
--*/
--AND r.current_recruitment_id ::uuid IN (SELECT recruitment_id FROM ids WHERE spring_autumn = 'Осень')
AND (r.birth_date BETWEEN DATE (extract(year from now())-30||'-10-02') and DATE (extract(year from now())-18||'-12-30'))
AND r.current_recruitment_id is null
),
vse as (
SELECT
rd.hidden as postponement,
'Весна' AS spring_autumn,
--COALESCE(dd.updated_at, dd.created_at) AS postponement_date,
r.recruit_id,
rd.postponement_date,
r.recruitment_id,
r.hidden
FROM recruit_data r
LEFT JOIN (
SELECT
ROW_NUMBER() OVER (PARTITION BY rd.recruit_id ORDER BY COALESCE(rd.system_update_date, rd.system_create_date) DESC) AS rn,
rd.recruit_id,
rd.hidden,
rd.postponement_date
FROM recruits_deferment rd
WHERE rd.hidden is false
AND (rd.postponement_date > DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '6 months' + INTERVAL '14 days')
-- AND (rd.postponement_date > DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '12 months')
) rd on rd.recruit_id = r.recruit_id AND rd.rn = 1
WHERE r.spring_autumn = 'Весна'
UNION ALL
SELECT
rd.hidden as postponement,
'Осень' AS spring_autumn,
--COALESCE(dd.updated_at, dd.created_at) AS postponement_date,
r.recruit_id,
rd.postponement_date,
r.recruitment_id,
r.hidden
FROM recruit_data r
LEFT JOIN (
SELECT
ROW_NUMBER() OVER (PARTITION BY rd.recruit_id ORDER BY COALESCE(rd.system_update_date, rd.system_create_date) DESC) AS rn,
rd.recruit_id,
rd.hidden,
rd.postponement_date
FROM recruits_deferment rd
WHERE rd.hidden is false
-- AND (rs.postponement_date > DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '6 months' + INTERVAL '14 days')
AND (rd.postponement_date > DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '12 months')
) rd on rd.recruit_id = r.recruit_id AND rd.rn = 1
WHERE r.spring_autumn = 'Осень'
)
SELECT
ri.recruitment_id,
ri.spring_autumn,
current_date AS recording_date,
COUNT(DISTINCT ri.recruit_id) FILTER (
WHERE
ri.hidden IS true -- нет отсрочки и нет освобождения от службы
) AS recruit
FROM vse AS ri
GROUP BY ri.recruitment_id, ri.spring_autumn</sql>
r.recruitment_id,
r.spring_autumn,
current_date as recording_date,
COUNT(r.recruit_id) FILTER (WHERE r.hidden IS NOT true) AS recruit,
COUNT(r.recruit_id) FILTER (WHERE r.postponement IS NOT null) AS postponement_have_right
FROM vse r
GROUP BY recruitment_id, spring_autumn</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
@ -144,25 +301,21 @@ GROUP BY ri.recruitment_id, ri.spring_autumn</sql>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<error_ignored>N</error_ignored>
<ignore_flag_field/>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>spring_autumn</field>
<name>spring_autumn</name>
<name2/>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
<name2/>
</key>
<schema>main_dashboard</schema>
<table>recruitment_campaign</table>
@ -170,6 +323,10 @@ GROUP BY ri.recruitment_id, ri.spring_autumn</sql>
<name>new_recruits</name>
<rename>recruit</rename>
</value>
<value>
<name>postponement_have_right</name>
<rename>postponement_have_right</rename>
</value>
</lookup>
<skip_lookup>N</skip_lookup>
<use_batch>N</use_batch>