+total_registered.age

This commit is contained in:
Ruslan 2025-03-07 15:08:51 +03:00
parent f7186f2fa1
commit 68bea2118c
2 changed files with 99 additions and 537 deletions

View file

@ -134,32 +134,8 @@
<set_logfile>N</set_logfile> <set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished> <wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel> <parallel>N</parallel>
<xloc>896</xloc> <xloc>944</xloc>
<yloc>368</yloc> <yloc>240</yloc>
<attributes_hac/>
</action>
<action>
<name>job_predictive.hwf</name>
<description/>
<type>WORKFLOW</type>
<attributes/>
<add_date>N</add_date>
<add_time>N</add_time>
<create_parent_folder>N</create_parent_folder>
<exec_per_row>N</exec_per_row>
<filename>${PROJECT_HOME}/predictive/job_predictive.hwf</filename>
<loglevel>Nothing</loglevel>
<parameters>
<pass_all_parameters>Y</pass_all_parameters>
</parameters>
<params_from_previous>N</params_from_previous>
<run_configuration>local</run_configuration>
<set_append_logfile>N</set_append_logfile>
<set_logfile>N</set_logfile>
<wait_until_finished>Y</wait_until_finished>
<parallel>N</parallel>
<xloc>1072</xloc>
<yloc>128</yloc>
<attributes_hac/> <attributes_hac/>
</action> </action>
</actions> </actions>
@ -192,20 +168,6 @@
<evaluation>N</evaluation> <evaluation>N</evaluation>
<unconditional>Y</unconditional> <unconditional>Y</unconditional>
</hop> </hop>
<hop>
<from>job_info_recruits.hwf</from>
<to>job_predictive.hwf</to>
<enabled>N</enabled>
<evaluation>N</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop>
<from>job_predictive.hwf</from>
<to>job_last_recording_date</to>
<enabled>N</enabled>
<evaluation>Y</evaluation>
<unconditional>Y</unconditional>
</hop>
<hop> <hop>
<from>job_info_recruits.hwf</from> <from>job_info_recruits.hwf</from>
<to>job_last_recording_date</to> <to>job_last_recording_date</to>

View file

@ -41,26 +41,6 @@
<to>Insert / update (total_registered.age) 2</to> <to>Insert / update (total_registered.age) 2</to>
<enabled>Y</enabled> <enabled>Y</enabled>
</hop> </hop>
<hop>
<from>Get variables 3 2 2 2</from>
<to>Select values 3 2 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Select values 3 2 2 2</from>
<to>Insert / update (total_registered.age) 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) регион/мужчины 2</from>
<to>Get variables 3 2 2 2</to>
<enabled>N</enabled>
</hop>
<hop>
<from>Table input (person_registry) регион/мужчины 2</from>
<to>Insert / update (total_registered.age) 2 2</to>
<enabled>N</enabled>
</hop>
</order> </order>
<transform> <transform>
<name>Get variables 3 2 2</name> <name>Get variables 3 2 2</name>
@ -95,39 +75,6 @@
<yloc>800</yloc> <yloc>800</yloc>
</GUI> </GUI>
</transform> </transform>
<transform>
<name>Get variables 3 2 2 2</name>
<type>GetVariable</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<field>
<length>-1</length>
<name>REC_ID</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
<field>
<length>-1</length>
<name>SCM</name>
<precision>-1</precision>
<trim_type>none</trim_type>
<type>String</type>
</field>
</fields>
<attributes/>
<GUI>
<xloc>1536</xloc>
<yloc>1008</yloc>
</GUI>
</transform>
<transform> <transform>
<name>Insert / update (total_registered.age) 2</name> <name>Insert / update (total_registered.age) 2</name>
<type>InsertUpdate</type> <type>InsertUpdate</type>
@ -282,160 +229,6 @@
<yloc>720</yloc> <yloc>720</yloc>
</GUI> </GUI>
</transform> </transform>
<transform>
<name>Insert / update (total_registered.age) 2 2</name>
<type>InsertUpdate</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<commit>100</commit>
<connection>ervu-dashboard</connection>
<lookup>
<key>
<condition>=</condition>
<field>recruitment_id</field>
<name>recruitment_id</name>
</key>
<key>
<condition>=</condition>
<field>recording_date</field>
<name>recording_date</name>
</key>
<key>
<condition>=</condition>
<field>registered</field>
<name>registered</name>
</key>
<key>
<condition>=</condition>
<field>"all_M_W"</field>
<name>gender</name>
</key>
<key>
<condition>=</condition>
<field>convicts</field>
<name>convicts</name>
</key>
<schema>total_registered</schema>
<table>age</table>
<value>
<name>"17_years"</name>
<rename>17_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years"</name>
<rename>18-26_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years"</name>
<rename>27-30_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years"</name>
<rename>31-35_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years"</name>
<rename>36-40_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years"</name>
<rename>41-45_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"all_M_W"</name>
<rename>gender</rename>
<update>N</update>
</value>
<value>
<name>"46-50_years"</name>
<rename>46-50_year_count</rename>
<update>Y</update>
</value>
<value>
<name>"17_years_percent"</name>
<rename>17_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"18-26_years_percent"</name>
<rename>18-26_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"27-30_years_percent"</name>
<rename>27-30_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"31-35_years_percent"</name>
<rename>31-35_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"36-40_years_percent"</name>
<rename>36-40_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"41-45_years_percent"</name>
<rename>41-45_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"46-50_years_percent"</name>
<rename>46-50_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>"51+_years_percent"</name>
<rename>51+_year_percent</rename>
<update>Y</update>
</value>
<value>
<name>recruitment_id</name>
<rename>recruitment_id</rename>
<update>N</update>
</value>
<value>
<name>registered</name>
<rename>registered</rename>
<update>N</update>
</value>
<value>
<name>total_count</name>
<rename>total_count</rename>
<update>Y</update>
</value>
<value>
<name>convicts</name>
<rename>convicts</rename>
<update>N</update>
</value>
</lookup>
<update_bypassed>Y</update_bypassed>
<attributes/>
<GUI>
<xloc>1920</xloc>
<yloc>928</yloc>
</GUI>
</transform>
<transform> <transform>
<name>Select values 3 2 2</name> <name>Select values 3 2 2</name>
<type>SelectValues</type> <type>SelectValues</type>
@ -490,60 +283,6 @@
<yloc>800</yloc> <yloc>800</yloc>
</GUI> </GUI>
</transform> </transform>
<transform>
<name>Select values 3 2 2 2</name>
<type>SelectValues</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<fields>
<select_unspecified>N</select_unspecified>
<meta>
<name>REC_ID</name>
<rename>REC_ID</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
<meta>
<name>SCM</name>
<rename>SCM</rename>
<type>String</type>
<length>-2</length>
<precision>-2</precision>
<conversion_mask/>
<date_format_lenient>false</date_format_lenient>
<date_format_locale/>
<date_format_timezone/>
<lenient_string_to_number>false</lenient_string_to_number>
<encoding/>
<decimal_symbol/>
<grouping_symbol/>
<currency_symbol/>
<storage_type/>
</meta>
</fields>
<attributes/>
<GUI>
<xloc>1680</xloc>
<yloc>1008</yloc>
</GUI>
</transform>
<transform> <transform>
<name>Table input (person_registry) регион/мужчины</name> <name>Table input (person_registry) регион/мужчины</name>
<type>TableInput</type> <type>TableInput</type>
@ -563,46 +302,103 @@ ids AS (
-- Преобразуем строковый массив в таблицу UUID -- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
), ),
last_status_r 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
where status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
group by recruit_id
),
registered as (
select
distinct rh.recruit_id,
rh.id as recruit_history_id
from recruits_history rh
join last_status_r ls on rh.recruit_id=ls.recruit_id and rh.date_time=ls.max_date_time
where rh.status not in ('1', '1.3', '12', '12.1', '12.2', '12.3', '12.4', '12.5', '13')
--and rh.source is not null
),
last_status_n as (select recruit_id,
max(date_time) filter (where status in ('1', '1.1', '12.2', '12.10')) max_date_time
from recruits_history
where status in ('1', '1.1', '12.2', '12.10')
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', '1.1', '12.2', '12.10')
--and rh.source is not null
),
recruit_data AS ( recruit_data AS (
SELECT SELECT
r.target_recruitment_id, distinct
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.current_recruitment_id, rh.current_recruitment_id) AS recruitment_id,
r.gender, r.gender,
r.vu_current_info->>'isMilitaryRegistered' AS registered, CASE
r.id AS recruit_id, WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'ALL'
END AS convicts,
'true' AS registered,
r.birth_date r.birth_date
FROM public.recruits r FROM public.recruits AS r
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id JOIN public.recruits_info AS ri
WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') ON ri.recruit_id = r.id
AND r.gender IN ('MALE', 'FEMALE') join public.recruits_history rh on rh.recruit_id=r.id
AND r.current_recruitment_id IS NOT NULL WHERE
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids) 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)
UNION ALL
SELECT
distinct
r.id,
ri.recruit_id AS recruit_id,
coalesce (r.target_recruitment_id, rh.target_recruitment_id) AS recruitment_id,
r.gender,
CASE
WHEN r.vu_current_info->>'recruitmentCommercialInfo' = 'true' THEN 'CONVICT'
ELSE 'ALL'
END AS convicts,
'false' AS registered,
r.birth_date
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
WHERE
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)
), ),
total_count AS ( total_count AS (
SELECT SELECT
rd.target_recruitment_id as recruitment_id, rd.recruitment_id,
rd.gender, rd.gender,
rd.registered, rd.registered,
rd.convicts,
COUNT(rd.recruit_id) AS total COUNT(rd.recruit_id) AS total
FROM recruit_data rd FROM recruit_data rd
GROUP BY rd.target_recruitment_id, rd.gender, rd.registered GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
), ),
total_count_all AS ( total_count_all AS (
SELECT SELECT
r.target_recruitment_id AS recruitment_id, rd.recruitment_id,
r.vu_current_info->>'isMilitaryRegistered' AS registered, rd.registered,
COUNT(r.id) AS total rd.convicts,
FROM public.recruits r COUNT(rd.recruit_id) AS total
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id FROM recruit_data rd
WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') GROUP BY rd.recruitment_id, rd.registered, rd.convicts
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered'
), ),
age_counts AS ( age_counts AS (
SELECT SELECT
rd.target_recruitment_id as recruitment_id, rd.recruitment_id,
rd.gender, rd.gender,
rd.registered, rd.registered,
rd.convicts,
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count", COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count", COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count", COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
@ -612,26 +408,23 @@ age_counts AS (
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count", COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count" COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
FROM recruit_data rd FROM recruit_data rd
GROUP BY rd.target_recruitment_id, rd.gender, rd.registered GROUP BY rd.recruitment_id, rd.gender, rd.registered, rd.convicts
), ),
age_counts_all AS ( age_counts_all AS (
SELECT SELECT
r.target_recruitment_id AS recruitment_id, r.recruitment_id,
r.vu_current_info->>'isMilitaryRegistered' AS registered, r.registered,
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count", r.convicts,
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count", COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count", COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count", COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count", COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count", COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count", COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count" COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
FROM public.recruits r COUNT(r.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id FROM recruit_data r
WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false') GROUP BY r.recruitment_id, r.registered, r.convicts
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered'
) )
SELECT SELECT
current_date AS recording_date, current_date AS recording_date,
@ -657,13 +450,14 @@ SELECT
WHEN tc.gender = 'MALE' THEN 'M' WHEN tc.gender = 'MALE' THEN 'M'
ELSE 'W' ELSE 'W'
END)::text AS gender, END)::text AS gender,
'ALL' AS convicts, tc.convicts,
tc.registered::text tc.registered::text
FROM total_count tc FROM total_count tc
LEFT JOIN age_counts ac LEFT JOIN age_counts ac
ON ac.recruitment_id = tc.recruitment_id ON ac.recruitment_id = tc.recruitment_id
AND ac.gender = tc.gender AND ac.gender = tc.gender
AND ac.registered = tc.registered AND ac.registered = tc.registered
AND ac.convicts = tc.convicts
UNION ALL UNION ALL
SELECT SELECT
current_date AS recording_date, current_date AS recording_date,
@ -686,12 +480,13 @@ SELECT
COALESCE(tca.total, 0) AS total_count, COALESCE(tca.total, 0) AS total_count,
tca.recruitment_id, tca.recruitment_id,
'ALL' AS gender, 'ALL' AS gender,
'ALL' AS convicts, tca.convicts,
tca.registered::text tca.registered::text
FROM total_count_all tca FROM total_count_all tca
LEFT JOIN age_counts_all aca LEFT JOIN age_counts_all aca
ON aca.recruitment_id = tca.recruitment_id ON aca.recruitment_id = tca.recruitment_id
AND aca.registered = tca.registered</sql> AND aca.registered = tca.registered
AND aca.convicts = tca.convicts</sql>
<variables_active>Y</variables_active> <variables_active>Y</variables_active>
<attributes/> <attributes/>
<GUI> <GUI>
@ -699,201 +494,6 @@ LEFT JOIN age_counts_all aca
<yloc>720</yloc> <yloc>720</yloc>
</GUI> </GUI>
</transform> </transform>
<transform>
<name>Table input (person_registry) регион/мужчины 2</name>
<type>TableInput</type>
<description/>
<distribute>Y</distribute>
<custom_distribution/>
<copies>1</copies>
<partitioning>
<method>none</method>
<schema_name/>
</partitioning>
<connection>ervu_person_registry</connection>
<execute_each_row>N</execute_each_row>
<limit>0</limit>
<sql>WITH
ids AS (
-- Преобразуем строковый массив в таблицу UUID
SELECT unnest(string_to_array(trim(both '{}' from '${ARR_MC}'), ','))::uuid AS recruitment_id
),
gender_separations AS (
SELECT 'MALE' AS gender
UNION ALL
SELECT 'FEMALE' AS gender
),
registered_separation AS (
SELECT 'true' AS registered
UNION ALL
SELECT 'false' AS registered
),
data_combinations AS (
-- Создаём все комбинации recruitment_id, gender и registered
SELECT
i.recruitment_id AS recruitment_id,
gs.gender,
rs.registered
FROM ids i
CROSS JOIN gender_separations gs
CROSS JOIN registered_separation rs
),
recruit_data AS (
SELECT
r.target_recruitment_id,
r.gender,
r.vu_current_info->>'isMilitaryRegistered' AS registered,
r.id AS recruit_id,
r.birth_date
FROM public.recruits r
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false')
AND r.gender IN ('MALE', 'FEMALE')
AND r.current_recruitment_id IS NOT NULL
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
),
total_count AS (
SELECT
dc.recruitment_id,
dc.gender,
dc.registered,
COUNT(rd.recruit_id) AS total
FROM data_combinations dc
LEFT JOIN recruit_data rd
ON rd.target_recruitment_id = dc.recruitment_id
AND rd.gender = dc.gender
AND rd.registered = dc.registered
GROUP BY dc.recruitment_id, dc.gender, dc.registered
),
total_count_all AS (
SELECT
r.target_recruitment_id AS recruitment_id,
r.vu_current_info->>'isMilitaryRegistered' AS registered,
COUNT(r.id) AS total
FROM public.recruits r
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false')
AND r.current_recruitment_id IS NOT NULL
AND r.vu_current_info->&gt;'recruitmentCommercialInfo' = 'true'
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered'
),
age_counts AS (
SELECT
dc.recruitment_id,
dc.gender,
dc.registered,
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) = 17) AS "17_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(rd.recruit_id) FILTER (WHERE EXTRACT(YEAR FROM AGE(rd.birth_date)) >= 51) AS "51+_year_count"
FROM data_combinations dc
LEFT JOIN recruit_data rd
ON rd.target_recruitment_id = dc.recruitment_id
AND rd.gender = dc.gender
AND rd.registered = dc.registered
GROUP BY dc.recruitment_id, dc.gender, dc.registered
),
age_counts_all AS (
SELECT
r.target_recruitment_id AS recruitment_id,
r.vu_current_info->>'isMilitaryRegistered' AS registered,
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) = 17) AS "17_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 18 AND 26) AS "18-26_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 27 AND 30) AS "27-30_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 31 AND 35) AS "31-35_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 36 AND 40) AS "36-40_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 41 AND 45) AS "41-45_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) BETWEEN 46 AND 50) AS "46-50_year_count",
COUNT(r.id) FILTER (WHERE EXTRACT(YEAR FROM AGE(r.birth_date)) >= 51) AS "51+_year_count"
FROM public.recruits r
LEFT JOIN public.recruits_info ri ON ri.recruit_id = r.id
WHERE r.vu_current_info->>'isMilitaryRegistered' IN ('true', 'false')
AND r.current_recruitment_id IS NOT NULL
AND r.vu_current_info->>'recruitmentCommercialInfo' = 'true'
AND r.target_recruitment_id::uuid IN (SELECT recruitment_id FROM ids)
GROUP BY r.target_recruitment_id, r.vu_current_info->>'isMilitaryRegistered'
)
SELECT
current_date AS recording_date,
COALESCE(ac."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(ac."17_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "17_year_percent",
COALESCE(ac."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(ac."18-26_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(ac."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(ac."27-30_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(ac."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(ac."31-35_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(ac."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(ac."36-40_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(ac."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(ac."41-45_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(ac."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(ac."46-50_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(ac."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(ac."51+_year_count", 0) * 100.0) / NULLIF(tc.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tc.total, 0) AS total_count,
dc.recruitment_id,
(CASE
WHEN dc.gender = 'MALE' THEN 'M'
WHEN dc.gender = 'FEMALE' THEN 'W'
ELSE null
END)::text AS gender,
'CONVICT' AS convicts,
dc.registered::text
FROM data_combinations dc
LEFT JOIN total_count tc
ON tc.recruitment_id = dc.recruitment_id
AND tc.gender = dc.gender
AND tc.registered = dc.registered
LEFT JOIN age_counts ac
ON ac.recruitment_id = dc.recruitment_id
AND ac.gender = dc.gender
AND ac.registered = dc.registered
UNION ALL
SELECT
current_date AS recording_date,
COALESCE(aca."17_year_count", 0) AS "17_year_count",
COALESCE(ROUND((COALESCE(aca."17_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "17_year_percent",
COALESCE(aca."18-26_year_count", 0) AS "18-26_year_count",
COALESCE(ROUND((COALESCE(aca."18-26_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "18-26_year_percent",
COALESCE(aca."27-30_year_count", 0) AS "27-30_year_count",
COALESCE(ROUND((COALESCE(aca."27-30_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "27-30_year_percent",
COALESCE(aca."31-35_year_count", 0) AS "31-35_year_count",
COALESCE(ROUND((COALESCE(aca."31-35_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "31-35_year_percent",
COALESCE(aca."36-40_year_count", 0) AS "36-40_year_count",
COALESCE(ROUND((COALESCE(aca."36-40_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "36-40_year_percent",
COALESCE(aca."41-45_year_count", 0) AS "41-45_year_count",
COALESCE(ROUND((COALESCE(aca."41-45_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "41-45_year_percent",
COALESCE(aca."46-50_year_count", 0) AS "46-50_year_count",
COALESCE(ROUND((COALESCE(aca."46-50_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "46-50_year_percent",
COALESCE(aca."51+_year_count", 0) AS "51+_year_count",
COALESCE(ROUND((COALESCE(aca."51+_year_count", 0) * 100.0) / NULLIF(tca.total, 0), 2), 0) AS "51+_year_percent",
COALESCE(tca.total, 0) AS total_count,
dc.recruitment_id,
'ALL' AS gender,
'CONVICT' AS convicts,
dc.registered::text
FROM data_combinations dc
LEFT JOIN total_count_all tca
ON tca.recruitment_id = dc.recruitment_id
AND tca.registered = dc.registered
LEFT JOIN age_counts_all aca
ON aca.recruitment_id = dc.recruitment_id
AND aca.registered = dc.registered
</sql>
<variables_active>Y</variables_active>
<attributes/>
<GUI>
<xloc>1296</xloc>
<yloc>928</yloc>
</GUI>
</transform>
<transform_error_handling> <transform_error_handling>
</transform_error_handling> </transform_error_handling>
<attributes/> <attributes/>