Boa tarde, estou fazendo um sistema de agenda. Preciso realizar uma consulta e trazer eventos recorrentes. Para não deixar o banco de dados pesado, não quero gravar eventos repetidos.
Elaborei o seguinte sql
SELECT e.id, e.nome, e.idcor, e.status,e.recorrencia,
array_to_string(array_agg(p.nome), ‘, ‘) as nomepessoa,
array_to_string(array_agg(p.id), ‘, ‘) as idpessoa,
CASE e.recorrencia
WHEN ‘1’
THEN ‘1 years’
WHEN ‘2’
THEN ‘1 weeks’
WHEN ‘3’
THEN ‘1 month’
ELSE NULL
END as teste,
GENERATE_SERIES(e.datainicio, ‘2020-01-01’::timestamptz, INTERVAL ‘1 years’) as datainicio,
GENERATE_SERIES(e.datafim, ‘2020-01-01’::timestamptz, INTERVAL ‘1 years’) as datafim
/*preciso dizer que o interval é igual ao alias teste*/
from evento e
left join evento_pessoa ep on e.id = ep.idevento
left join pessoa p on ep.idpessoa = p.id
where e.status = 1
group by e.id, e.idcor, e.datainicio, e.datafim, e.nome, e.status, e.datainicio, e.recorrencia
ORDER BY E.ID DESC
SELECT generate_series(current_timestamp,current_timestamp + ‘5 days’,teste::interval)
FROM
(
SELECT
CASE ‘1’
WHEN ‘1’
THEN ‘1 years’
WHEN ‘2’
THEN ‘1 weeks’
END AS teste
) as temp_alias;
Boa tarde, estou fazendo um sistema de agenda. Preciso realizar uma consulta e trazer eventos recorrentes. Para não deixar o banco de dados pesado, não quero gravar eventos repetidos.
Elaborei o seguinte sql
SELECT e.id, e.nome, e.idcor, e.status,e.recorrencia,
array_to_string(array_agg(p.nome), ‘, ‘) as nomepessoa,
array_to_string(array_agg(p.id), ‘, ‘) as idpessoa,
CASE e.recorrencia
WHEN ‘1’
THEN ‘1 years’
WHEN ‘2’
THEN ‘1 weeks’
WHEN ‘3’
THEN ‘1 month’
ELSE NULL
END as teste,
GENERATE_SERIES(e.datainicio, ‘2020-01-01’::timestamptz, INTERVAL ‘1 years’) as datainicio,
GENERATE_SERIES(e.datafim, ‘2020-01-01’::timestamptz, INTERVAL ‘1 years’) as datafim
/*preciso dizer que o interval é igual ao alias teste*/
from evento e
left join evento_pessoa ep on e.id = ep.idevento
left join pessoa p on ep.idpessoa = p.id
where e.status = 1
group by e.id, e.idcor, e.datainicio, e.datafim, e.nome, e.status, e.datainicio, e.recorrencia
ORDER BY E.ID DESC
Atenciosamente
Olá, fonte da resposta:
https://stackoverflow.com/questions/47820811/issue-with-generate-series-in-case-sentence
terás que adaptar, eu gosto de usar funções pipelined para agendamentos e etc, mas acho que ajuda
a resposta abaixo:
SELECT generate_series(current_timestamp,current_timestamp + ‘5 days’,teste::interval)
FROM
(
SELECT
CASE ‘1’
WHEN ‘1’
THEN ‘1 years’
WHEN ‘2’
THEN ‘1 weeks’
END AS teste
) as temp_alias;
Show, vou tentar aqui. Muito obrigada