Intervalo de Datas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Seg, 24 Abr 2006 9:33 am

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
marcoantoniorocha
Localização: São Carlos - SP

Marco Antonio Rocha

Mensagemem Seg, 24 Abr 2006 9:55 am

Faça assim:

Código: Selecionar todos
SELECT COUNT(ID)
FROM TABELA
WHERE INICIO >= TO_DATE('1990', 'YYYY')
  AND FIM    <= TO_DATE('1995', 'YYYY')


É claro, esse sql só vai funcionar se o INICIO for realmente menor que o FIM.
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Seg, 24 Abr 2006 10:23 am

Obrigado pela resposta, mas acho que não me expressei muito bem. :)

Eu gostaria de um count por ano. No meu exemplo, eu preciso que sejam retornadas 6 linhas:

ANO: 1990 - COUNT: 1
ANO: 1991 - COUNT: 1
ANO: 1992 - COUNT: 1
ANO: 1993 - COUNT: 1
ANO: 1994 - COUNT: 1
ANO: 1995 - COUNT: 1

Não encontrei ainda nenhuma maneira de fazer isso. Será possível?
marcoantoniorocha
Localização: São Carlos - SP

Marco Antonio Rocha

Mensagemem Seg, 24 Abr 2006 11:10 am

Vou apresentar a você a clausula GROUP BY dos SQL.
Veja o exemplo abaixo com o SCOTT
Código: Selecionar todos
SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE     
---------- ---------- --------- ---------- ---------
      7369 SMITH      CLERK           7902 17-DEC-80
      7499 ALLEN      SALESMAN        7698 20-FEB-81
      7521 WARD       SALESMAN        7698 22-FEB-81
      7566 JONES      MANAGER         7839 02-APR-81
      7654 MARTIN     SALESMAN        7698 28-SEP-81
      7698 BLAKE      MANAGER         7839 01-MAY-81
      7782 CLARK      MANAGER         7839 09-JUN-81
      7788 SCOTT      ANALYST         7566 19-APR-87
      7839 KING       PRESIDENT            17-NOV-81
      7844 TURNER     SALESMAN        7698 08-SEP-81
      7876 ADAMS      CLERK           7788 23-MAY-87
      7900 JAMES      CLERK           7698 03-DEC-81
      7902 FORD       ANALYST         7566 03-DEC-81
      7934 MILLER     CLERK           7782 23-JAN-82

14 rows selected.

SQL> SELECT TO_CHAR(HIREDATE, 'YYYY'), COUNT(EMPNO) QTD
  2  FROM EMP
  3  GROUP BY TO_CHAR(HIREDATE, 'YYYY')
  4  /

TO_C        QTD
---- ------------
1980            1
1981           10
1982            1
1987            2

SQL>
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Seg, 24 Abr 2006 11:20 am

É assim mesmo que estou fazendo. Só que ainda assim não resolve completamente o meu problema.

Usando o seu exemplo (acha que fica mais fácil de explicar). Se eu quiser saber quantos funcionários foram contratados por ano no período de 1980 a 1990, como eu deveria fazer pra obter um resultado parecido com esse:

Código: Selecionar todos
TO_C        QTD
---- ------------
1980            1
1981           10
1982            1
1983            0
1984            0
1985            0
1986            0
1987            2
1988            0
1989            0
1990            0
marcoantoniorocha
Localização: São Carlos - SP

Marco Antonio Rocha

Mensagemem Ter, 02 Mai 2006 1:17 pm

Marcos, tenta com essa query!

Código: Selecionar todos
select      ano,
              count(id)
from       empregados
group by ano
having    count(id) >= 0
order by ano


Atenciosamente,

Álvaro
asarmento
Localização: Salvador - BA

Álvaro Sarmento
Analista de Sistemas
Unitech - Tecnologia de Informação
www.unitech.com.br



Voltar para SQL

Quem está online

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