Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael R.P

[Resolvido] Consulta por mes, inicio sempre em segunda

Recommended Posts

Opa galera tudo bem?

 

Estou precisando fazer uma consulta onde devo retornar somente os resultados de um mes

porem o inicio da consulta deve sempre iniciar em uma segunda e terminar em um domingo da semana.

segue meu sql onde ele retorna os dados separando por semana porem inicio no dia 1 independente do dia da semana.

 

SELECT semana,
 MIN(TO_CHAR(dt_abertura, 'DD/MM/YYYY')) AS DATA_INICIO
FROM
 (SELECT id_servico,
   dt_abertura,
   TO_CHAR(dt_abertura, 'W') AS semana
 FROM servicos
 WHERE dt_abertura >= add_months(to_date('7/2011', 'MM/YYYY'), -1)
 AND dt_abertura   < to_date('7/2011', 'MM/YYYY')
 ORDER BY dt_abertura
 )
GROUP BY semana
ORDER BY semana

 

Agradeco desde ja

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se isto ajuda.

 

Esta query retorna a primeira segunda anterior ao primeiro dia do mes da data.

 

SELECT NEXT_DAY((TRUNC(to_date('01082011','ddmmyyyy'),'MM') - 7),2) FROM DUAL
UNION
select NEXT_DAY((TRUNC(to_date('01072011','ddmmyyyy'),'MM') - 7),2) FROM DUAL
UNION
SELECT NEXT_DAY((TRUNC(TO_DATE('01062011','ddmmyyyy'),'MM') - 7),2) FROM DUAL
order by 1 desc

 

esta trata os domingos

SELECT  NEXT_DAY((LAST_DAY(TO_DATE('01082011','ddmmyyyy'))-7),1) FROM DUAL
UNION ALL
SELECT  NEXT_DAY((LAST_DAY(TO_DATE('01072011','ddmmyyyy'))-7),1) FROM DUAL
UNION ALL
SELECT  NEXT_DAY((LAST_DAY(TO_DATE('01062011','ddmmyyyy'))-7),1) FROM DUAL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara até deu certo ele pegou a segunda do mes anterior,

mas os resultados foram sempre a primeira segunda do mes anterior, como eu poderia fazer para pegar a próxima segunda?

 

SELECT semana,
 min(NEXT_DAY((TRUNC(dt_abertura,'MM') - 7),2)) AS DATA_INICIO,
 MIN(TO_CHAR(dt_abertura, 'DAY')) AS INICIO_SEMANA
FROM
 (SELECT id_servico,
   dt_abertura,
   TO_CHAR(dt_abertura, 'W') AS semana
 FROM servicos
 WHERE dt_abertura >= to_date('7/2011', 'MM/YYYY')
 AND dt_abertura   < add_months(to_date('7/2011', 'MM/YYYY'), 1)
 ORDER BY dt_abertura
 )
GROUP BY semana
ORDER BY semana;

 

Resultado:

SEMANA DATA_INICIAL

1-------27/06/11

2-------27/06/11

3-------27/06/11

4-------27/06/11

5-------27/06/11

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque

 

WHERE dt_abertura >= to_date('7/2011', 'MM/YYYY')
 AND dt_abertura   < add_months(to_date('7/2011', 'MM/YYYY'), 1)

 

por

 

 WHERE dt_abertura between  NEXT_DAY((TRUNC(to_date('01072011','ddmmyyyy'),'MM') - 7),2) and 
                                 NEXT_DAY((LAST_DAY(TO_DATE('01072011','ddmmyyyy'))-7),1)

 

para tratar o intervalo, creio que funcione

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada feito cara,

agora ele me retornou semanas com o dia 27 e as duas ultimas semanas como dia 30..

 

nao é algo no MIN(TO_CHAR(dt_abertura, 'DAY')) AS INICIO_SEMANA ?

 

agradeço a ajuda

 

 

Edited....

Concegui cara

em vez de

 

MIN(NEXT_DAY((TRUNC(dt_abertura,'DD') - 7),2)) AS DATA_INICIO

:D

valeu pela ajuda..

 

aproveitando o topico para tirar mais uma duvida do mesmo sql...

 

 

na outra coluna estou pegando o dia da semana respectiva a esta data..

MIN(TO_CHAR(dt_abertura, 'DAY')) AS INICIO_SEMANA

 

mas este valor não está correto, qual seria a forma correta?

Obrigado !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi do problema voc~e precisa pegar os dados de um internvalo e tratar o começo/fim da semana e depois exibir num calendário.

 

O intervalo creio ter resolvido no Post #4, uma forma de montar um calendário está lá no Post #2

 

O comando MIN(TO_CHAR(dt_abertura, 'DAY')) AS INICIO_SEMANA

obtem o nome do dia da semana de menor valor1 obtido o que não faz muito sentido para mim.

 

----------------------------------------------------------------------------------------------------------------------------------------

1-Se o result retornou um intervalo com todos os dias da semanas possíveis MIN(TO_CHAR(dt_abertura, 'DAY')) AS INICIO_SEMANA seria Domingo pois é menor na ordem alfabetica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.