- Este tópico contém 17 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 6 meses atrás por
burga.
-
AutorPosts
-
27 de agosto de 2010 às 4:35 pm #95712
batofao
Participantebom dia meus amigos,
viu sera que eu consigo selecionar todas as datas de um ano, por exempo
com o select :
SELECT LAST_DAY(TO_DATE(’01/’||ROWNUM||’/2009′,’DD/MM/YYYY’))
FROM (tabela )
WHERE ROWNUM <= 12 and o problema é que no from eu queria colocar alguma tabela que retorne todos os dias do ano conseguentemente o select retornaria os ultimos dias de cada mes... obrigado27 de agosto de 2010 às 5:19 pm #95715burga
ParticipanteIsso que você quer?
select
to_date('01/01/2010')+level-1
from dual
connect by
to_date('01/01/2010')+level-1
<= last_day(to_date('01/12/2010'));27 de agosto de 2010 às 6:39 pm #95716batofao
Participanteé sim, dai tenho uma tabela chamada calendario que esta os sabados e domingos e feriados, não sei como faço para achar o ultimo dia ultil de cada mes levando em consideração que a data não pode estar na tabela de feriado….
27 de agosto de 2010 às 7:56 pm #95717burga
ParticipanteUm dos caminhos é:
primeiro você pega o select postado anteriormente e faz
MINUS
select das datas da sua tabela de feriado (calendario)Feito isto, coloca tudo em uma cláusula from e seleciona o MAX(data) agrupando por mês.
27 de agosto de 2010 às 9:31 pm #95719batofao
Participanteseria mais ou menos isso:
select
to_date(’01/01/2010′)+level-1
from dual
connect by
to_date(’01/01/2010′)+level-1
<= last_day(to_date('01/12/2010'))
MINUS select * from feriados_internacionaispq não deu certo…
obg..
27 de agosto de 2010 às 9:40 pm #95720batofao
Participanteopa consegui deu certo sim.. muito obrigado.. só mais uma duvida como que eu dou max date de cada mes especifico…
obg….
27 de agosto de 2010 às 9:45 pm #95721burga
Participantepega todo o select que você já montou e faz:
select max(sua_data)
from
( o select que você montou )
group by
to_char(sua_data,'MM');O sua_data seria a coluna de data que sobrou da diferença dos dois selects (dias do ano – dias não uteis). Você pode colocar um álias nela pra facilitar…
27 de agosto de 2010 às 10:26 pm #95722batofao
Participanteentendi tudo mas me descupe a ignorancia é que depois que eu tenho o resultado eu não sei qual o nome do campo pq foi aquela rotina que criou minhas datas, ai que campo que eu coloco no max?
obs
no resultado ele me aparece assim:
TO_DATE(’01/01/2010)+LEVEL-1 –é esse campo mesmo que eu pecifico?
01/01/2010
02/01/201027 de agosto de 2010 às 10:43 pm #95725burga
ParticipanteComo disse no post anterior você pode utilizar um álias pra facilitar sua vida, o álias seria o apelido para o campo:
select
to_date('01/01/2010')+level-1 APELIDO
from dual
connect by
to_date('01/01/2010')+level-1
<= last_day(to_date('01/12/2010'))MINUS
select data
from feriados_internacionaisnote que logo depois da expressão de cálculo no select (to_date(’01/01/2010′)+level-1) eu cloquei um “apelido”, pode ser qualquer coisa.
Com isso, você pode chamar o campo pelo apelido no select externo…
27 de agosto de 2010 às 10:50 pm #95726batofao
ParticipanteDEU CERTO,
MUITO OBRIGADO. MAIS UMA VEZ
😀
30 de agosto de 2010 às 3:35 pm #95744batofao
Participanteola,
me responda uma coisa, pq nessa consulta se eu coloco uma data por exmplo data inicial 01/03/2007 e final 02/02/2010 ele só me da os 12 meses de data…
obg
30 de agosto de 2010 às 5:04 pm #95749burga
ParticipantePorque você está agrupando por mês… Você pode agrupar por mês e ano que ele vai retornar certo…
30 de agosto de 2010 às 5:13 pm #95751batofao
Participantedeu certo .. obrigado novamente.
30 de agosto de 2010 às 6:41 pm #95758batofao
Participantenão querendo abusar, mais surgiu a seguinte duvida?
eu ja tenho as datas que preciso (ultimos dias ulteis de cada mes)
agora junto com essas data eu tenho um valor, a duvida é a seguinte
por exemplo:DATA Valor
28/05/10 10,150769
28/09/07 7,695931
30/09/09 9,591923
30/12/09 9,798184onde o valor retornado por exemplo no dia 30/12 é ( valor / valor mes anterior -1)
30/12/09 (9,798184 / 9,591923 -1)
como aplico isso dentro dessa consulta..
obrigado
30 de agosto de 2010 às 8:38 pm #95763burga
Participantevocê pode usar uma subquery pra pegar o valor do mes anterior e jogar na sua conta…
-
AutorPosts
- Você deve fazer login para responder a este tópico.