This commit is contained in:
Ruslan 2024-11-05 20:36:33 +05:00
parent cc7fdba689
commit 7d7483746a
4 changed files with 81 additions and 97 deletions

View file

@ -790,12 +790,22 @@
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH extracted_children AS (
<sql>WITH vse as (
select *,
r.id as r_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM
public.recruits_info ri
vse ri
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
),
@ -804,7 +814,7 @@ children_birth_dates AS (
recruit_id,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'den')::int AS day,
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'mesyacz')::int AS month,
(child::jsonb->'svedFLBS'->'dataRozhdDok'-&gt;&gt;'god')::int AS year
(child::jsonb->'svedFLBS'->'dataRozhdDok'->>'god')::int AS year
FROM
extracted_children
),
@ -820,48 +830,43 @@ children_count AS (
recruit_id
),
recruit_data AS (
SELECT
SELECT
COUNT(*) AS total_count,
COUNT(*) FILTER (WHERE gender = 'MALE') AS male_count,
COUNT(*) FILTER (WHERE gender = 'FEMALE') AS female_count,
COUNT(*) FILTER (
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 70
WHERE (EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 70
AND gender = 'MALE') -- мужчины от 18 до 70 лет
OR
(EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
OR
(EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 45
AND gender = 'FEMALE') -- женщины от 18 до 45 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND COALESCE(cc.children_under_16, 0) &lt; 5 -- исключить рекрутов с 5 и более детьми младше 16 лет
) AS mobilization_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 30
AND gender = 'MALE' -- мужчины от 18 до 30 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
) AS volunteer_criterion,
COUNT(*) FILTER (
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
WHERE EXTRACT(YEAR FROM AGE(NOW(), birth_date)) BETWEEN 18 AND 50
AND gender = 'MALE' -- мужчины от 18 до 50 лет
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' -- признак отсутствия данных о судимости
) AS contract_criterion
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
) AS contract_criterion
FROM vse as ri
LEFT JOIN children_count AS cc
ON r.id = cc.recruit_id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
)
SELECT
ON ri.r_id = cc.recruit_id
)
SELECT
total_count,
male_count,
female_count,
'${REG_ID}' AS recruitment_id,
mobilization_criterion,
volunteer_criterion,
contract_criterion,
ROUND(mobilization_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS mobilization_criterion_percent,
contract_criterion,
ROUND(mobilization_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS mobilization_criterion_percent,
ROUND(volunteer_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS volunteer_criterion_percent,
ROUND(contract_criterion::NUMERIC / NULLIF(total_count, 0) * 100, 2) AS contract_criterion_percent
FROM recruit_data;</sql>

View file

@ -795,18 +795,24 @@
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH extracted_children AS (
<sql>WITH vse as (
select *,
r.id as r_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
FROM
vse ri
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
children_birth_dates AS (
SELECT
@ -853,18 +859,13 @@ recruit_data AS (
AND (conscription IS NULL OR conscription = false) -- отсутствие отсрочки
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1' -- признак отсутствия данных о судимости
) AS contract_criterion
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
FROM vse as ri
LEFT JOIN children_count AS cc
ON r.id = cc.recruit_id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
ON ri.r_id = cc.recruit_id
)
SELECT
waiting_count,
ROUND(COALESCE((waiting_count::DECIMAL / NULLIF((SELECT COUNT(*) FROM public.recruits), 0) * 100), 0), 2) AS waiting_percent,
ROUND(COALESCE((waiting_count::DECIMAL / NULLIF((SELECT COUNT(*) FROM public.recruits), 0) * 100), 0), 2) AS waiting_percent,
male_count,
female_count,
'${REG_ID}' AS recruitment_id,

View file

@ -785,18 +785,15 @@
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
<sql>WITH vse as (
select *,
r.id as r_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
@ -805,6 +802,15 @@
END
)
)
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM
vse ri
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
),
children_birth_dates AS (
SELECT
@ -846,23 +852,10 @@ recruit_data AS (
AND (conscription IS NULL OR conscription = false)
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
LEFT JOIN children_count AS cc
ON r.id = cc.recruit_id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'true'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
END
)
)
)
FROM vse as ri
LEFT JOIN children_count AS cc
ON ri.r_id = cc.recruit_id
)
SELECT
'${REG_ID}' AS recruitment_id,
COALESCE(rd.total_count, 0) AS total_count,

View file

@ -790,26 +790,24 @@
<schema_name/>
</partitioning>
<connection>postgres.person_registry</connection>
<sql>WITH extracted_children AS (
<sql>WITH vse as (
select *,
r.id as r_id
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id IS NOT NULL
),
extracted_children AS (
SELECT
ri.recruit_id,
jsonb_array_elements_text(ri.info->'svedDeti'->'rebenok') AS child
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
FROM
vse ri
WHERE
jsonb_typeof(ri.info->'svedDeti'->'rebenok') = 'array'
AND r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
END
)
)
),
children_birth_dates AS (
SELECT
@ -849,23 +847,10 @@ recruit_data AS (
AND (conscription IS NULL OR conscription = false)
AND ri.info->'svedSudim'->>'prOtsSvedSudim' = '1'
) AS contract_criterion
FROM public.recruits AS r
JOIN public.recruits_info AS ri
ON ri.recruit_id = r.id
LEFT JOIN children_count AS cc
ON r.id = cc.recruit_id
WHERE r.vu_current_info ->> 'isMilitaryRegistered' = 'false'
AND r.current_recruitment_id IS NOT NULL
AND (
'${VK_ARRAY}' IS NOT NULL AND '${VK_ARRAY}' != ''
AND r.target_recruitment_id = ANY (
CASE
WHEN '${VK_ARRAY}' IS NULL OR '${VK_ARRAY}' = '' THEN ARRAY[]::uuid[]
ELSE string_to_array(trim(both '{}' FROM replace('${VK_ARRAY}', ' ', '')), ',')::uuid[]
END
)
)
)
FROM vse as ri
LEFT JOIN children_count AS cc
ON ri.r_id = cc.recruit_id
)
SELECT
'${REG_ID}' AS recruitment_id,
COALESCE(rd.waiting_count, 0) AS waiting_count,