Intervalo de Datas
Pessoal,
Tenho uma tabela que tem os seguintes campos: INICIO (DATE), FIM (DATE), ID (NUMBER).
Supondo que eu tenha o seguinte registro:
INICIO: 01/02/1990
FIM: 01/02/1995
ID: 2
Como eu poderia fazer um select count que me retornasse os anos de 1990 a 1995? Há alguma maneira?
Obrigado
Tenho uma tabela que tem os seguintes campos: INICIO (DATE), FIM (DATE), ID (NUMBER).
Supondo que eu tenha o seguinte registro:
INICIO: 01/02/1990
FIM: 01/02/1995
ID: 2
Como eu poderia fazer um select count que me retornasse os anos de 1990 a 1995? Há alguma maneira?
Obrigado
Marcoantoniorocha
Curtidas 0
Respostas
Rosterne
24/04/2006
Marco,
não sei se é isso que você quer. Abaixo segue um select que conta quandos registros têm na tabela com data inicio no ano de 90 e data de fim no ano de 95.
select count(*) from i where to_char(inicio, ´yyyy´)=´1990´ and to_char(fim, ´yyyy´)=´1995´
Abraço.
não sei se é isso que você quer. Abaixo segue um select que conta quandos registros têm na tabela com data inicio no ano de 90 e data de fim no ano de 95.
select count(*) from i where to_char(inicio, ´yyyy´)=´1990´ and to_char(fim, ´yyyy´)=´1995´
Abraço.
GOSTEI 0
Rosterne
24/04/2006
Marco,
não sei se é isso que você quer. Abaixo segue um select que conta quantos registros têm na tabela com data inicio no ano de 90 e data de fim no ano de 95.
select count(*) from i where to_char(inicio, ´yyyy´)=´1990´ and to_char(fim, ´yyyy´)=´1995´
Abraço.
não sei se é isso que você quer. Abaixo segue um select que conta quantos registros têm na tabela com data inicio no ano de 90 e data de fim no ano de 95.
select count(*) from i where to_char(inicio, ´yyyy´)=´1990´ and to_char(fim, ´yyyy´)=´1995´
Abraço.
GOSTEI 0
Marcoantoniorocha
24/04/2006
Obrigado pela ajuda, Renato. Infelizmente não é isso.
Eu gostaria que retornasse algo assim:
Eu consigo contar e agrupar os registros, mas não consigo exibir as linhas onde a contagem seja zero.
Obrigado
Eu gostaria que retornasse algo assim:
ANO QTD ---- ------------ 1980 1 1981 10 1982 1 1983 0 1984 0 1985 0 1986 0 1987 2 1988 0 1989 0 1990 0
Eu consigo contar e agrupar os registros, mas não consigo exibir as linhas onde a contagem seja zero.
Obrigado
GOSTEI 0
Rosterne
24/04/2006
Marco, realmente acho que ainda nao entendi.
O que entendi, é que vc quer mostrar aqueles anos que não têm na tabela, ou seja, após o agrupamento dos dados os anos sem registros devem retornar a quantidade de zero.
Fiz o seguinte, criei uma tabela LISTA, que será a que contém uma lista de ano, no meu caso de 1980 à 1990. Dessa tabela é chamado os dados dos anos que não contêm na tabela PRINCIPAL.
Abaixo segue um exemplo de como ficaria, mesmo não sendo o que você quer pode te abrir um caminho.
EX:
select count(*) as ´Qtd´, to_number(to_char(inicio, ´rrrr´), 9999) as ´Ano´ from PRINCIPAL
group by to_number(to_char(inicio, ´rrrr´), 9999)
union
select 0 as ´Qtd´ ,to_number(to_char(ano, ´rrrr´), 9999) as ´Ano´ from LISTA where
to_number(to_char(ano, ´rrrr´), 9999)
not in (select to_number(to_char(inicio, ´rrrr´), 9999) as ´Ano´ from PRINCIPAL
group by to_number(to_char(inicio, ´rrrr´), 9999))
order by 2
Abraço.
O que entendi, é que vc quer mostrar aqueles anos que não têm na tabela, ou seja, após o agrupamento dos dados os anos sem registros devem retornar a quantidade de zero.
Fiz o seguinte, criei uma tabela LISTA, que será a que contém uma lista de ano, no meu caso de 1980 à 1990. Dessa tabela é chamado os dados dos anos que não contêm na tabela PRINCIPAL.
Abaixo segue um exemplo de como ficaria, mesmo não sendo o que você quer pode te abrir um caminho.
EX:
select count(*) as ´Qtd´, to_number(to_char(inicio, ´rrrr´), 9999) as ´Ano´ from PRINCIPAL
group by to_number(to_char(inicio, ´rrrr´), 9999)
union
select 0 as ´Qtd´ ,to_number(to_char(ano, ´rrrr´), 9999) as ´Ano´ from LISTA where
to_number(to_char(ano, ´rrrr´), 9999)
not in (select to_number(to_char(inicio, ´rrrr´), 9999) as ´Ano´ from PRINCIPAL
group by to_number(to_char(inicio, ´rrrr´), 9999))
order by 2
Abraço.
GOSTEI 0
Marcoantoniorocha
24/04/2006
Renato,
Eu tentei essa abordagem também mas, infelizmente, não posso recorrer à criação de outra tabela.
Obrigado pela ajuda. Esse é um exercício de uma das minhas listas da disciplina de Laboratório de Base de Dados. Não consegui resolver, apanhei bastante mas descobri várias coisas interessantes.
Obrigado!
Eu tentei essa abordagem também mas, infelizmente, não posso recorrer à criação de outra tabela.
Obrigado pela ajuda. Esse é um exercício de uma das minhas listas da disciplina de Laboratório de Base de Dados. Não consegui resolver, apanhei bastante mas descobri várias coisas interessantes.
Obrigado!
GOSTEI 0
Daneluti
24/04/2006
Nao se se já resolveu, mas tente isso:
select to_char(data,´YYYY´) ano, count(*) qtd
from tabela
where data between ´01/01/2000´ and ´01/01/2006´
group by to_char(data,´YYYY´)
order by 1;
Creio que seja o que está procurando.
select to_char(data,´YYYY´) ano, count(*) qtd
from tabela
where data between ´01/01/2000´ and ´01/01/2006´
group by to_char(data,´YYYY´)
order by 1;
Creio que seja o que está procurando.
GOSTEI 0
Daneluti
24/04/2006
Nao se se já resolveu, mas tente isso:
select to_char(data,´YYYY´) ano, count(*) qtd
from tabela
where data between ´01/01/2000´ and ´01/01/2006´
group by to_char(data,´YYYY´)
order by 1;
Creio que seja o que está procurando.
desculpe, faltou o resto...
com o comando de cima vc agrupa... se quer ver apenas os que tem contagem 0 vc faz assim:
select to_char(data,´YYYY´) ano, count(*) qtd
from tabela
where data between ´01/01/2000´ and ´01/01/2006´
group by to_char(data,´YYYY´)
having count(*) = 0
order by 1;
agora, para mostrar os anos que nao tenham nenhum registro eu nao sei te dizer se via SQL puro dá para fazer.... conheço formas de fazer isso usando funcoes ou entao utilizando 2 tabelas, como rosterne sugeriu.
GOSTEI 0