m_d.total_reg convict

This commit is contained in:
Ruslan 2025-03-17 14:03:35 +03:00
parent a999ebb3c7
commit 1e05529849
2 changed files with 65 additions and 25 deletions

View file

@ -257,12 +257,12 @@ registered as (
),
vse AS (
SELECT
distinct
--distinct
r.id AS r_id,
ri.recruit_id AS recruit_id,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'ALL'
ELSE 'NOTCONVICT'
END AS convicts,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS r_current_recruitment_id,
r.gender,
@ -296,9 +296,9 @@ vse AS (
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedFL'->'svedDeti'->'rebenok') AS child
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM vse ri
WHERE jsonb_typeof(ri.info->'svedFL'->'svedDeti'->'rebenok') = 'array'
WHERE jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
@ -320,22 +320,22 @@ recruit_data AS (
SELECT
ri.r_current_recruitment_id::uuid AS recruitment_id,
ri.convicts,
COUNT(*) AS total_count,
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(*) FILTER (
COUNT(distinct ri.recruit_id) AS total_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) < 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(*) FILTER (
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(*) FILTER (
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'
@ -346,6 +346,19 @@ recruit_data AS (
FROM vse AS ri
LEFT JOIN children_count AS cc ON ri.recruit_id = cc.recruit_id
GROUP BY ri.r_current_recruitment_id, ri.convicts
),
recruit_data_all AS (
SELECT
recruitment_id,
'ALL' AS convicts,
SUM(total_count) AS total_count,
SUM(male_count) AS male_count,
SUM(female_count) AS female_count,
SUM(mobilization_criterion) AS mobilization_criterion,
SUM(volunteer_criterion) AS volunteer_criterion,
SUM(contract_criterion) AS contract_criterion
FROM recruit_data
GROUP BY recruitment_id
)
SELECT
ids.recruitment_id,
@ -370,7 +383,34 @@ SELECT
ELSE 0
END AS contract_criterion_percent
FROM ids
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
JOIN recruit_data AS rd ON ids.recruitment_id = rd.recruitment_id
UNION ALL
SELECT
ids.recruitment_id,
rd.convicts,
current_date AS recording_date,
COALESCE(rd.total_count, 0) AS total_count,
COALESCE(rd.male_count, 0) AS male_count,
COALESCE(rd.female_count, 0) AS female_count,
COALESCE(rd.mobilization_criterion, 0) AS mobilization_criterion,
COALESCE(rd.volunteer_criterion, 0) AS volunteer_criterion,
COALESCE(rd.contract_criterion, 0) AS contract_criterion,
CASE
WHEN rd.total_count > 0 THEN ROUND(rd.mobilization_criterion::NUMERIC / rd.total_count * 100, 2)
ELSE 0
END AS mobilization_criterion_percent,
CASE
WHEN rd.total_count > 0 THEN ROUND(rd.volunteer_criterion::NUMERIC / rd.total_count * 100, 2)
ELSE 0
END AS volunteer_criterion_percent,
CASE
WHEN rd.total_count > 0 THEN ROUND(rd.contract_criterion::NUMERIC / rd.total_count * 100, 2)
ELSE 0
END AS contract_criterion_percent
FROM ids
JOIN recruit_data_all AS rd ON ids.recruitment_id = rd.recruitment_id</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>

View file

@ -242,12 +242,12 @@ last_status as (select recruit_id,
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 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')
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status 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
),
total_recruits AS (
@ -257,7 +257,7 @@ total_recruits AS (
WHERE
r.id in (SELECT recruit_id FROM notregistered) and
coalesce(r.target_recruitment_id,rh.target_recruitment_id) ::uuid IN (SELECT recruitment_id FROM ids)
AND r.current_recruitment_id is null
AND r.current_recruitment_id is null
),
vse AS (
SELECT
@ -292,7 +292,7 @@ vse AS (
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)
AND r.current_recruitment_id is null
AND r.current_recruitment_id is null
),
extracted_children AS (
SELECT
@ -320,22 +320,22 @@ children_count AS (
recruit_data AS (
SELECT
ri.r_target_recruitment_id::uuid AS recruitment_id,
COUNT(*) AS waiting_count,
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(*) FILTER (
COUNT(distinct ri.recruit_id) AS waiting_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(distinct ri.recruit_id) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(distinct ri.recruit_id) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 50 AND gender = 'MALE') -- мужчины от 30 до 50 лет
OR (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 30 AND 45 AND gender = 'FEMALE') -- женщины от 30 до 45 лет
AND COALESCE(cc.children_under_16, 0) &lt; 5
) AS mobilization_criterion, -- критерии от 03.06.2025
COUNT(*) FILTER (
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE'
AND hidden IS true -- нет отсрочки и нет освобождения от службы
) AS volunteer_criterion, -- критерии от 03.06.2025
COUNT(*) FILTER (
COUNT(distinct ri.recruit_id) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE'
AND (ri.info->'svedFL'->'svedPND'->>'prOtsSvedPND' = '1'