Intervalo de Datas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
marcoantoniorocha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Seg, 24 Abr 2006 9:33 am
Localização: São Carlos - SP
Marco Antonio Rocha

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
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

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

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.
marcoantoniorocha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Seg, 24 Abr 2006 9:33 am
Localização: São Carlos - SP
Marco Antonio Rocha

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?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

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

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> 
marcoantoniorocha
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Seg, 24 Abr 2006 9:33 am
Localização: São Carlos - SP
Marco Antonio Rocha

É 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
asarmento
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qui, 27 Abr 2006 8:50 pm
Localização: Salvador - BA
Álvaro Sarmento
Analista de Sistemas
Unitech - Tecnologia de Informação
www.unitech.com.br

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
Responder
  • Informação
  • Quem está online

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