Achar terceiro domingo consecutivo do mês

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Olá pessoal, gostaria de pedir ajuda de vocês, estou fazendo essa select pra saber o terceiro domingo consecutivo
estou fazendo assim, mas não sei se está correto o primeiro domingo eu achei aqui no forum e deduzi o segundo domingo , mas terceiro domingo estou com muita duvida.

Selecionar tudo

decode(dt_trabalho,trunc(sysdate, 'MM') + mod((8 - to_number(to_char(trunc(sysdate, 'MM'), 'D'))),7),'primeiro','')primeiro,
decode(dt_trabalho,trunc(sysdate, 'MM') + mod((8 - to_number(to_char(trunc(sysdate, 'MM'), 'D'))),14),'segundo','')segundo,
decode(dt_trabalho,trunc(sysdate, 'MM') + mod((15 - to_number(to_char(trunc(sysdate, 'MM'), 'D'))),21),'terceiro','')terceiro
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Olá,

Não entendi bem o que você quer.
É saber o terceiro domingo após certa data?????
É mostrar os 3 domingo subsequentes após certa data???
O que seria mais específicamente?

Mas segue um exemplo pegando por base o seu:

Selecionar tudo

select sysdate data_atual 
     , sysdate + (7 - to_number(to_char(sysdate ,'w'))) primeiro
     , sysdate + (14 - to_number(to_char(sysdate ,'w'))) segundo
     , sysdate + (21 - to_number(to_char(sysdate ,'w'))) terceiro
  from dual
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Olá seria assim o funcionário trabalha numa data de domingo e na outra de domingo e na outra de domingo

ele só pode trabalhar três domingos consecutivos
se ele trabalhou no 01/12/2013 e 15/12/2013 , ele pode trabalhar,
se ele trabalhou no 01/12/2013 e 08/12/2013 e 15/12/2013 ele não pode. você entendeu ?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Na verdade você tem uma tabela com os dias trabalhados e você quer saber se o funcionário deverá trabalhar no "próximo domingo"?? É isso?
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Isso mesmo
na verdade o funcionário não pode trabalhar o quarto domingo

e já tem funcionário que ´só pode trabalhar dois domingo consecutivos.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

FIZ O EXEMPLO DE QUEM não PODE TRABALHAR 4 DOMINGOS SEGUIDOS:

Selecionar tudo

WITH  dias_trab as(
select 1 func, TO_DATE('10/12/2013','DD/MM/RRRR') data_atual from dual
union all
select 1 func,TO_DATE('01/12/2013','DD/MM/RRRR') + 7  from dual
union all
select 1 func,TO_DATE('01/12/2013','DD/MM/RRRR') + 14  from dual
union all
select 1 func,TO_DATE('01/12/2013','DD/MM/RRRR')   from dual
union all
select 2 func, TO_DATE('13/12/2013','DD/MM/RRRR') data_atual from dual
union all
select 2 func,TO_DATE('01/12/2013','DD/MM/RRRR') + 7  from dual
union all
select 2 func,TO_DATE('01/12/2013','DD/MM/RRRR') + 14 from dual
)

select dt.func
     , COUNT(1)
     , DECODE(COUNT(1),3,'FOLGA','TRABALHA')
  from dias_trab dt
 where 1 = 1
   AND to_char(dt.data_atual,'d') = 1 --(PEGA SOMENTE OS DOMINGOS)
   AND dt.data_atual between (SYSDATE - 21) AND (SYSDATE) --(PEGA SOMENTE ULTIMAS 3 SEMANAS (21 DIAS))
GROUP BY dt.func   
ORDER BY 1,2;
wilkemaia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qua, 18 Dez 2013 9:40 am

Obrigado, isso vai ajudar bastante.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 29 visitantes