Página 1 de 1

Intervalo de Datas

Enviado: Seg, 24 Abr 2006 9:33 am
por marcoantoniorocha
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

Enviado: Seg, 24 Abr 2006 9:55 am
por dr_gori
Faça assim:

Selecionar tudo

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.

Enviado: Seg, 24 Abr 2006 10:23 am
por marcoantoniorocha
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:

Selecionar tudo

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?

Enviado: Seg, 24 Abr 2006 11:10 am
por dr_gori
Vou apresentar a você a clausula GROUP BY dos SQL.
Veja o exemplo abaixo com o SCOTT

Selecionar tudo

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> 

Enviado: Seg, 24 Abr 2006 11:20 am
por marcoantoniorocha
É 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:

Selecionar tudo

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

Tenta ai

Enviado: Ter, 02 Mai 2006 1:17 pm
por asarmento
Marcos, tenta com essa query!

Selecionar tudo

select      ano,
              count(id)
from       empregados
group by ano
having    count(id) >= 0
order by ano
Atenciosamente,

Álvaro