Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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
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 !!
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.
Realamente não preciso do dia da semana para mostrar na tela so para controle mesmo..
deu certo o sql, vlw pela ajuda !!
:D
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