[firebase-br] Dúvida sobre Select

Anderson infosag em terra.com.br
Sex Ago 8 21:34:27 -03 2008


boa solucao.

abs

----- Original Message ----- 
From: "Hércules Mohamed" <hercules.mohamed em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, August 08, 2008 9:28 PM
Subject: Re: [firebase-br] Dúvida sobre Select


O nosso colega Anderson foi mais rápido, mas como eu jah tinha feito uma
solução estou enviando:

select count(distinct(id_aluno)) from AULAS_PRATICAS
 where ID_VEICULO =:veiculo and DATA BETWEEN :data_ini and :data_fim

Hércules Mohamed


2008/8/8 Anderson <infosag em terra.com.br>

> amigo acho que é usar o distinct e fazer um select agrupador:
>
>
> select sum(id_aluno), id_veiculo
> from (
> select distinct(id_aluno),  id_veiculo
> from tabela )
> group by id_veiculo
>
>
>
> acho que é isso !
>
> abracos
>
>
> ----- Original Message -----
> From: "Carlos Andrade" <krlosgilson em gmail.com>
> To: <lista em firebase.com.br>
> Sent: Friday, August 08, 2008 8:23 PM
> Subject: Re: [firebase-br] Dúvida sobre Select
>
>
> > Então galera, estou tentando executar esta procedure de dentro da minha
> > aplicação, mas também de dentro do Firebird está gerando esta exception.
> > Estou precisando o contador não conte a quantidade de aulas que existe 
> > na
> > tabela e sim se existe aulas de 20 alunos do veículo que irei informar e
> o
> > intevalo de datas.
>
> tipo assim:
>
> ID_ALUNO    ID_VEICULO    DATA
>
> 4                      1                        08-01-2008
> 4                      1                        08-02-2008
> 4                      1                        08-03-2008
> 7                      1                        08-01-2008
> 7                      1                        08-02-2008
> 8                      1                        08-03-2008
> 8                      1                        08-03-2008
>
> Então, no resultado acima está me mostrando a quantidade total de aulas 
> que
> foi marcada para o veículo tal no período tal. Só que não é disso que 
> estou
> precisando, e sim que a procedure agrupe e retorne apenas 3. Por que nesse
> resultado ai só foram marcadas as aulas para 3 alunos. É que o sistema do
> Detran precisa bloquear aulas para o mesmo veículo quando esse mesmo
> veículo
> completar aulas de 20 alunos no mês, sendo que não interessa a quantidade
> de
> aulas. Acho que agora deu para entender melhor.... Obrigado pela
> disponibilidade de todos!
>
>
> (Samuel Ferreira) escreveu:
>
> ola
>
> olha, nao tem como dar 'multiple rows' no count.
>
> como vc ta chamando a procedure?
>
> (Felipe Oriani) escreveu:
>
> Olá Carlos, tente executar esta sql diretamente no FireBird ou no SQL
> Editor
> do IBExpert (caso vc o utilize)...
> Não sei se é interessante, mas neste caso, acho que você poderia executar
> diretamente no software este tipo de sql..
>
> (Carlos Andrade) escreveu:
>
> Boa Noite! Tenho uma tabela que armazena as aulas práticas dos alunos de 
> um
> sistema para Auto-Escolas. Estou precisando dar um select que me retorne 1
> (para true) ou 0 (para false) se já foram marcadas as aulas de 20 alunos
> diferentes em um determinado período de datas. Tentei as seguintes
> procedures:
>
> CREATE PROCEDURE SP_LIMITE_AULAS_VEIC(
>    VEICULO INTEGER,
>    DATA_INI DATE,
>    DATA_FIM DATE)
> RETURNS (
>    YES_NO SMALLINT)
> AS
> declare variable qtde integer;
> begin
>  /* Verifica se já foram marcadas as 20 aulas do veículo no mês */
>  select count(*) from AULAS_PRATICAS
>  where ID_VEICULO =:veiculo and DATA BETWEEN :data_ini and :data_fim
>  into : qtde;
>  if (qtde > 19) then yes_no = 1; else yes_no = 0;
>  suspend;
> end
>
> (  NESSE EXEMPLO ACIMA ESTÁ ME RETORNANDO VÁRIAS LINHAS GERANDO UM
> EXCEPTION, MULTIPLE ROWS..... )
>
> CREATE PROCEDURE SP_LIMITE_AULAS_VEIC(
>    VEICULO INTEGER,
>    DATA_INI DATE,
>    DATA_FIM DATE)
> RETURNS (
>    YES_NO SMALLINT)
> AS
> declare variable qtde integer;
> begin
>  /* Verifica se já foram marcadas as 20 aulas do veículo no mês */
>  select count(*) from AULAS_PRATICAS
>  where ID_VEICULO =:veiculo and DATA BETWEEN :data_ini and :data_fim
>  group by ID_ALUNO
>  into : qtde;
>  if (qtde > 19) then yes_no = 1; else yes_no = 0;
>  suspend;
> end
>
> (  NESSE EXEMPLO ACIMA NÃO GERA NENHUMA EXCEPTION, MAS ESTÁ MOSTRANDO O
> RESULTADO NÃO ESPERADO, POIS O RESULTADO ESTÁ MOSTRANDO A QUANTIDADE DE
> AULAS DE TODOS OS ALUNOS.
>
> Então, o que estou querendo é a quantidade de alunos no período informado
> que foram marcados no veículo especificado.
>
> Acho que deu para entender!!!
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista