Пожалуйста, мне нужна помощь с этим чудовищным запросом, потому что загрузка его занимает более 3 минут и приводит к сбою в рабочей среде.
Я уже пытался создать представление для него, но ничегоизменилосьЯ пытался решить также, используя LATERAL в левых соединениях, но, возможно, я сделал это неправильно.
select t.*
from (select x.cod_company,
y.nome_fantasia,
x.nome as nome_da_funcao,
remove_caracteres_especiais(replace(x.descricao, ';', '-')) as descricao_informacoes_adicionais,
x.quantidade as quatidade_de_vagas,
tipo,
(case when x.pcd = true then 'Sim' else 'Não' end) as vaga_pcd,
x.cod_escolaridade,
x.cod_turno,
x.salario::text,
x.logradouro as endereco,
x.numero as numero_endereco,
x.complemento,
x.referencia,
x.cep,
x.bairro,
case
when tgm.nome is null then y.cidade
else tgm.nome end as municipio,
case
when tgm.sigla_estado is null then tge.sigla_estado
else tgm.sigla_estado
end as uf,
x.cod_state,
x.data_cadastro::date,
x.prazo as validade_do_anuncio,
x.d_alimentacao as auxilio_alimentacao,
x.d_alimentacao,
x.d_saude as plano_de_saude,
x.d_transporte as auxilio_transporte,
x.d_outros as outros,
e.nome as escolaridade_exigida,
tu.nome as nome_turno,
max(case when c.ordem = 1 then c.cod_area_atuacao else null end) cod_cbo_area_atuacao_1,
max(case when c.ordem = 1 then c.titulo else null end) descricao_cbo_areatuacao_1,
max(case when c.ordem = 1 then c.exigido_desejavel else null end) cod_tempo_experiencia_exigido_1,
max(
case when c.ordem = 1 then c.tempo_experiencia_exigido else null end) desc_tempo_experiencia_exigido_1,
max(case when c.ordem = 2 then c.cod_area_atuacao else null end) cod_cbo_area_atuacao_2,
max(case when c.ordem = 2 then c.titulo else null end) descricao_cbo_areatuacao_2,
max(case when c.ordem = 2 then c.exigido_desejavel else null end) cod_tempo_experiencia_exigido_2,
max(
case when c.ordem = 2 then c.tempo_experiencia_exigido else null end) desc_tempo_experiencia_exigido_2,
max(case when c.ordem = 3 then c.cod_area_atuacao else null end) cod_cbo_area_atuacao_3,
max(case when c.ordem = 3 then c.titulo else null end) descricao_cbo_areatuacao_3,
max(case when c.ordem = 3 then c.exigido_desejavel else null end) cod_tempo_experiencia_exigido_3,
max(
case when c.ordem = 3 then c.tempo_experiencia_exigido else null end) desc_tempo_experiencia_exigido_3,
max(case when c.ordem = 4 then c.cod_area_atuacao else null end) cod_cbo_area_atuacao_02,
max(case when c.ordem = 4 then c.titulo else null end) descricao_cbo_areatuacao_02,
max(case when c.ordem = 4 then c.exigido_desejavel else null end) cod_tempo_experiencia_exigido_02,
max(
case when c.ordem = 4 then c.tempo_experiencia_exigido else null end) desc_tempo_experiencia_exigido,
max(case when c.ordem = 5 then c.cod_area_atuacao else null end) cod_cbo_area_atuacao,
max(case when c.ordem = 5 then c.titulo else null end) descricao_cbo_areatuacao,
max(case when c.ordem = 5 then c.exigido_desejavel else null end) cod_tempo_experiencia_exigido_333,
max(
case when c.ordem = 5 then c.tempo_experiencia_exigido else null end) desc_tempo_experiencia_exigido_3333,
max(case when c1.ordem = 1 then c1.cod_curso else null end) curso_complementar_cod_1,
max(
case when c1.ordem = 1 then c1.curso_exigido_ou_desejado else null end) curso_complementar_exigido_desejado_1,
max(case when c1.ordem = 1 then c1.denominacao else null end) curso_complementar_nome_1,
max(case when c1.ordem = 2 then c1.cod_curso else null end) curso_complementar_cod_2,
max(
case when c1.ordem = 2 then c1.curso_exigido_ou_desejado else null end) curso_complementar_exigido_desejado_2,
max(case when c1.ordem = 2 then c1.denominacao else null end) curso_complementar_nome_2,
max(case when c1.ordem = 3 then c1.cod_curso else null end) curso_complementar_cod_3,
max(
case when c1.ordem = 3 then c1.curso_exigido_ou_desejado else null end) curso_complementar_exigido_desejado_3,
max(case when c1.ordem = 3 then c1.denominacao else null end) curso_complementar_nome_3,
max(case when c1.ordem = 4 then c1.cod_curso else null end) curso_complementar_cod_4,
max(
case when c1.ordem = 4 then c1.curso_exigido_ou_desejado else null end) curso_complementar_exigido_desejado_4,
max(case when c1.ordem = 4 then c1.denominacao else null end) curso_complementar_nome_4,
max(case when c1.ordem = 5 then c1.cod_curso else null end) curso_complementar_cod_5,
max(
case when c1.ordem = 5 then c1.curso_exigido_ou_desejado else null end) curso_complementar_exigido_desejado_5,
max(case when c1.ordem = 5 then c1.denominacao else null end) curso_complementar_nome_5,
max(case when c2.ordem = 1 then c2.cod_curso else null end) curso_tecnico_cod_1,
max(
case when c2.ordem = 1 then c2.curso_exigido_ou_desejado else null end) curso_tecnico_exigido_desejado_1,
max(case when c2.ordem = 1 then c2.denominacao else null end) curso_tecnico_nome_1,
max(case when c2.ordem = 2 then c2.cod_curso else null end) curso_tecnico_cod_2,
max(
case when c2.ordem = 2 then c2.curso_exigido_ou_desejado else null end) curso_tecnico_exigido_desejado_2,
max(case when c2.ordem = 2 then c2.denominacao else null end) curso_tecnico_nome_2,
max(case when c2.ordem = 3 then c2.cod_curso else null end) curso_tecnico_cod_3,
max(
case when c2.ordem = 3 then c2.curso_exigido_ou_desejado else null end) curso_tecnico_exigido_desejado_3,
max(case when c2.ordem = 3 then c2.denominacao else null end) curso_tecnico_nome_3,
max(case when c2.ordem = 4 then c2.cod_curso else null end) curso_tecnico_cod_4,
max(
case when c2.ordem = 4 then c2.curso_exigido_ou_desejado else null end) curso_tecnico_exigido_desejado_4,
max(case when c2.ordem = 4 then c2.denominacao else null end) curso_tecnico_nome_4,
max(case when c2.ordem = 5 then c2.cod_curso else null end) curso_tecnico_cod_5,
max(
case when c2.ordem = 5 then c2.curso_exigido_ou_desejado else null end) curso_tecnico_exigido_desejado_5,
max(case when c2.ordem = 5 then c2.denominacao else null end) curso_tecnico_nome_5,
y.cnpj,
y.razao_social,
y.logradouro as logradouro_company,
y.numero as numero_logradouro_company,
y.cep as cep_company,
y.bairro as bairro_company,
y.bairro as bairro_companya,
y.cidade as cidade_company,
y.cod_state as cod_state_company,
y.uf as cod_uf_company,
tge.sigla_estado as sigla_uf_company,
y.nome_contato as nome_contato_company,
y.email as email_company,
y.telefone_contato as telefone_contato_company,
y.site as site_company,
CASE
WHEN date_part('day',
((x.data_ultima_operacao + interval '1' day * x.prazo) - current_timestamp))::integer between 0 and x.prazo
THEN 'ativo'
ELSE 'inativo'
END as status_vaga,
x.data_ultima_operacao::timestamp(0) + interval '1' day * x.prazo data_validade_anuncio,
TO_CHAR(x.data_cadastro, 'dd/mm/YYYY hh:mi:ss') AS data_cadastro_vaga,
TO_CHAR(x.data_modificacao, 'dd/mm/YYYY hh:mi:ss') AS data_modificacao_vaga,
case when x.id is not null then 0 end as origem
from ( ( (((((
company.company_cad_vagas x left join company.company y on (x.cod_company = y.cod_company)
) left join (
select (row_number() over (partition by a.id_cad_vaga order by a.id asc)) as ordem,
a.*,
o.titulo,
(case when a.exigido_desejavel = 0 then 'Não exigido' else t.nome end) as tempo_experiencia_exigido
from (company.company_cad_vagas_areas_atuacao a left join
conf.cbo2002_ocupacao o on o.codigo::integer = a.cod_area_atuacao)
left join conf.faixa_tempo_trabalho t on t.cod_faixa_tempo_trabalho = a.exigido_desejavel
) c on c.id_cad_vaga = x.id ) left join conf.escolaridade e on e.cod_escolaridade = x.cod_escolaridade) left join conf.turno tu on tu.cod_turno = x.cod_turno)
left join (
select (row_number() over (partition by a.id_cad_vaga order by a.id asc)) as ordem,
a.*,
o.denominacao,
(case when a.exigido_desejavel = 1 then 'Exigido' else 'Desejado' end) as curso_exigido_ou_desejado
from (company.company_cad_vagas_ex_cursos a
left join
conf.cursos_fic o on o.id = a.cod_curso)
) c1 on c1.id_cad_vaga = x.id) left join (
select (row_number() over (partition by a.id_cad_vaga order by a.id asc)) as ordem,
a.*,
o.nome as denominacao,
(case when a.exigido_desejavel = 1 then 'Exigido' else 'Desejado' end) as curso_exigido_ou_desejado
from (company.company_cad_vagas_ex_cursos_tecnicos a
left join
conf.cursos_tecnicos o on o.id = a.cod_curso)
) c2 on c2.id_cad_vaga = x.id ) left join conf.tb_geo_municipios tgm on tgm.codigo = x.cod_state )
left join conf.vw_tb_geo_states tge on tge.cod_uf::text = y.uf
where y.cod_company is not null
and y.status = 1
and x.status = 1
and y.aprovado = 1
and (substring(x.cod_state::text, 1, 1)::integer > 0
or (x.cod_state is null
or x.cod_state = 0))
and (
case
when x.status = 0 then false
when x.status = 1
and current_date < (x.data_cadastro::date + x.prazo::integer) then true
when x.status = 1
and current_date >= (x.data_cadastro::date + x.prazo::integer) then false
end) = true
group by x.id,
x.cod_company, x.nome, x.descricao, x.quantidade, tipo,
(case when x.pcd = true then 'Sim' else 'Não' end),
x.cod_escolaridade, x.cod_turno, x.salario, x.logradouro, x.numero, x.complemento, x.referencia, x.cep,
x.cep, x.bairro, tgm.nome, tgm.sigla_estado, x.cod_state, x.data_cadastro::date, x.prazo,
x.d_alimentacao, x.d_alimentacao, x.d_saude, x.d_transporte, x.d_outros,
e.nome, tu.nome,
y.cnpj, y.razao_social, y.nome_fantasia,
y.logradouro,
y.numero,
y.cep,
y.bairro,
y.bairro,
y.cidade,
y.cod_state,
y.uf,
tge.sigla_estado,
y.nome_contato,
y.email,
y.telefone_contato,
y.site,
status_vaga,
data_validade_anuncio,
x.data_cadastro,
x.data_modificacao
union all
select ve.id,
replace(ve.company, ';', '-') as company,
replace(ve.title, ';', '-') as title,
(concat(replace(regexp_replace(ve.description, '[ ]+', ' ', 'g'), ';', '-'),
replace(regexp_replace(ve.requisitos, '[ ]+', ' ', 'g'), ';', '-'),
replace(regexp_replace(ve.beneficios, '[ ]+', ' ', 'g'), ';', '-'),
replace(regexp_replace(ve.desejavel, '[ ]+', ' ', 'g'), ';', '-'),
replace(regexp_replace(ve.regime, '[ ]+', ' ', 'g'), ';', '-'))) descricao_informacoes_adicionais,
1 quantidade_de_vagas,
ve.tipo tipo,
'' vaga_pcd,
0 cod_escolaridade,
0 cod_turno,
ve.salario salario,
ve.logradouro endereco,
'' numero_endereco,
'' complemento,
'' referencia,
'' cep,
'' bairro,
ve.location_city,
uf.sigla,
ve.state,
ve.data_cadastro,
case
when ve.data_expiracao is not null then extract(days
from
(data_expiracao - data_cadastro))
else 9999
end as validade_do_anuncio,
null auxilio_alimentacao,
null d_alimentacao,
null plano_de_saude,
null auxilio_transporte,
null outros,
null escolaridade_exigida,
null nome_turno,
null cod_cbo_area_atuacao_1,
null descricao_cbo_areatuacao_1,
null cod_tempo_experiencia_exigido_1,
null desc_tempo_experiencia_exigido_1,
null cod_cbo_area_atuacao_2,
null descricao_cbo_areatuacao_2,
null cod_tempo_experiencia_exigido_2,
null desc_tempo_experiencia_exigido_2,
null cod_cbo_area_atuacao_3,
null descricao_cbo_areatuacao_3,
null cod_tempo_experiencia_exigido_3,
null desc_tempo_experiencia_exigido_3,
null cod_cbo_area_atuacao_2,
null descricao_cbo_areatuacao_2,
null cod_tempo_experiencia_exigido_2,
null desc_tempo_experiencia_exigido,
null cod_cbo_area_atuacao,
null descricao_cbo_areatuacao,
null desc_tempo_experiencia_exigido_333,
null curso_complementar_cod_1,
null curso_complementar_exigido_desejado_1,
null curso_complementar_nome_1,
null curso_complementar_cod_2,
null curso_complementar_exigido_desejado_2,
null curso_complementar_nome_2,
null curso_complementar_cod_3,
null curso_complementar_exigido_desejado_3,
null curso_complementar_nome_3,
null curso_complementar_cod_4,
null curso_complementar_exigido_desejado_4,
null curso_complementar_nome_4,
null curso_complementar_cod_5,
null curso_complementar_exigido_desejado_5,
null curso_complementar_nome_5,
null curso_tecnico_cod_1,
null curso_tecnico_exigido_desejado_1,
null curso_tecnico_nome_1,
null curso_tecnico_cod_2,
null curso_tecnico_exigido_desejado_2,
null curso_tecnico_nome_2,
null curso_tecnico_cod_3,
null curso_tecnico_exigido_desejado_3,
null curso_tecnico_nome_3,
null curso_tecnico_cod_4,
null curso_tecnico_exigido_desejado_4,
null curso_tecnico_nome_4,
null curso_tecnico_cod_5,
null curso_tecnico_exigido_desejado_5,
null curso_tecnico_nome_5,
ve.cnpj cnpj,
'' razao_social,
'' logradouro_company,
'' numero_logradouro_company,
'' cep_company,
'' bairro_company,
'' cidade_company,
'' cod_state_company,
'' cod_uf_company,
0 sigla_uf_company,
'' nome_contato_company,
'' email_company,
'' telefone_contato_company,
'' site_company,
case
when ve.status = 0 then 'inativo'
when ve.status = 1 then 'ativo'
end as status_vagas,
case
when ve.data_expiracao is not null then ve.data_expiracao::text
else ''
end as data_validade_anuncio,
case
when ve.data_cadastro is not null then ve.data_cadastro::text
else ''
end as data_cadastro_vaga,
now() data_modificacao_vaga,
'' col87,
'' col88,
ve.origem
from (
select distinct on
(x.id) id,
x.constante
from profissional.vagas_externas x
where 1 = 1
and ((substring(x.state::text, 1, 1)::integer > 0))
and date_trunc('minute', x.data_cadastro::timestamp(0)) in (
select distinct on
( ve.data_cadastro::date ) date_trunc('minute', data_cadastro::timestamp(0))
from profissional.vagas_externas ve
order by ve.data_cadastro::date asc,
ve.constante desc)
and ((substring(x.state::text, 1, 1)::integer > 0))
) x
left join profissional.vagas_externas ve on
ve.constante = x.constante
left join conf.tb_geo_states uf on
uf.codigo::text = substring(ve.state::text, 1, 2)
where 1 = 1
) t;