Fórum [SQL ORACLE ] QUERY COM INTERVADO DE DATA, RETIRANDO OS FERIADOS #616244
12/07/2021
0
Pessoal preciso montar uma query, onde eu pegue os 5 ultimos dias uteis, retirando os feriados(Já tenho essa tabela), onde eu some todas as linhas e tire a média dela.
Exemplo
eu tenho pedidos de segunda a sexta
porém quarta é feriado eu não quero contar com esse dia
então eu vou pegar sexta, segunda, terça, quinta e sexta, somo a quantidade e divido por 5 para pegar a média
como faço isso pelo Oracle SQL
minha tabela de feriado esta assim
id dia mes feriado
1 1 1 Ano Novo
2 25 1 Aniversário da Cidade
3 21 4 Dia de Tiradentes
4 1 5 Dia do Trabalho
5 9 7 Revolução Constitucionalista
6 7 9 Independência do Brasil
7 12 10 Nossa Senhora Aparecida
8 2 11 Dia de Finados
9 15 11 Proclamação da República
10 20 11 Dia da Consciência Negra
11 25 12 Natal
Rodrigo Conceição
Curtir tópico
+ 0Post mais votado
13/07/2021
select (sysdate - level) dt from dual left join feriado on to_char(feriado.mes, 'FM00') || '-' || to_char(feriado.dia, 'FM00') = to_char((sysdate - level),'MM-DD') where not (to_char(sysdate - level, 'd') in (1,7)) and feriado.dia is null and ROWNUM <= 5 connect by level <= 15 -- aqui usei 15 para ter uma folga nas datas, afinal não se sabe quantos feriados podem existir order by dt desc
Emerson Nascimento
Gostei + 1
Mais Posts
14/07/2021
Rodrigo Conceição
select (sysdate - level) dt from dual left join feriado on to_char(feriado.mes, 'FM00') || '-' || to_char(feriado.dia, 'FM00') = to_char((sysdate - level),'MM-DD') where not (to_char(sysdate - level, 'd') in (1,7)) and feriado.dia is null and ROWNUM <= 5 connect by level <= 15 -- aqui usei 15 para ter uma folga nas datas, afinal não se sabe quantos feriados podem existir order by dt desc
Amigo, antes de mais nada obrigado pela ajuda, mais fui rodar essa query e veio a seguinte mensagem
ORA-00976: A pseudocoluna ou operador especificado(a) não é permitido aqui.
00976. 00000 - "Specified pseudocolumn or operator not allowed here."
*Cause: LEVEL, PRIOR, ROWNUM, CONNECT_BY_ROOT, CONNECT_BY_ISLEAF or
CONNECT_BY_ISCYCLE was specified at an illegal location.
*Action: Remove LEVEL, PRIOR, ROWNUM, CONNECT_BY_ROOT, CONNECT_BY_ISLEAF or
CONNECT_BY_ISCYCLE.
Error at Line: 6 Column: 114
Minha dúvda é como também posso colocar essa consulta dentro do meu select, exemplo:
select * from pedidos where datacadastro >= '6 dias uteis para trás' and datacadastro <= '2 dias uteis para atrás'
Mais uma vez te agradeço
Gostei + 0
14/07/2021
Emerson Nascimento
de qualquer forma, tente somente assim:
select
(sysdate - level) dt
from
dual
where
not (to_char(sysdate - level, 'd') in (1,7)) -- lista somente os dias úteis
connect by
level <= 15 -- aqui usei 15 para ter uma folga nas datas, afinal não se sabe quantos feriados podem existir
order by
dt desc
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)