[firebase-br] RES: SELECT MAX(CAMPO) com Condição específica

Luis luisfirevb em gmail.com
Qui Set 17 10:08:37 -03 2009


Perdoem minha ignorância, mas gostaria de entender uma coisa no SQL:

Usando o exemplo abaixo do colega, ao usar mais de uma instruções MAX ou MIN
no mesmo select o SQL consegue filtras nos diversos campo selecionado o
registro único que atende simultaneamente a todos os ítens?

Veja O exemplo:
Se queremos a (MAIOR data) com (MAIOR Valor) e o (MENOR desconto) com base
numa condição (Status = 0) o SQL varre todos os registros diversas vezes
para achar o registro desejado:

Registros

ID	-	Data		- Valor		- Desconto	- Status
1	-	01/05/2009	- R$ 5.000,00	- R$ 0,00	- 0
2	-	02/05/2009	- R$ 2.500,00	- R$ 15,00	- 0
3	-	02/05/2009	- R$ 4.000,00	- R$ 5,00	- 0
4	-	02/05/2009	- R$ 4.500,00	- R$ 10,00	- 0

Qual seria o resultado da consulta?

3	-	02/05/2009	- R$ 4.000,00	- R$ 5,00	- 0
Ou
4	-	02/05/2009	- R$ 4.500,00	- R$ 10,00	- 0

O ID 3 tem o MENOR desconto já o ID 4 tem o MAIOR Valor, nesse exemplo não
há um registro que tenha as duas condições juntas.

Luis

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Ronaldo Moreira
Enviada em: quinta-feira, 17 de setembro de 2009 09:03
Para: FireBase
Assunto: Re: [firebase-br] SELECT MAX(CAMPO) com Condição específica

Não sei como fica a questao do Group by, mas tente...

SELECT C.CODIGO,ATIVO ,C.COD_CLI, C.NUM_CONTR, COD_CAT,
COD_FUNC,C.OBSERVACAO,
 DATA, CANCELADO, DATA_CANCEL, INADIM, DATVENCCARENCIA, C.STATUS,
 VARLOR_PARCELA, DATA_VENCIM, CONT_BENE, COBRADOR, CL.NOME AS CLIENTE,
CT.DESCR AS CATEGORIA,
 MIN(CR.DAT_VENC) AS INICIO, MAX(CR.DAT_VENC) AS FIM, MAX(CR2.DAT_PAGTO) AS
PGTO
 FROM CONTRATO C,CLIENTE CL, CATEGORIA CT,  CONTA_A_RECEBER CR,
CONTA_A_RECEBER CR2
 WHERE C.COD_CLI = CL.CODIGO AND C.COD_CAT = CT.CODIGO
  AND CR.COD_CLI = CL.CODIGO AND CR.COD_CONTR = C.CODIGO
 AND CR2.COD_CLI = CL.CODIGO AND CR2.COD_CONTR = C.CODIGO
AND CR2.STATUS = 0
  AND CL.NOME LIKE '%'
 AND ATIVO = 'S'
 AND CANCELADO <> 'S'
 AND C.STATUS = 0
 GROUP BY C.CODIGO,ATIVO ,C.COD_CLI, C.NUM_CONTR, COD_CAT,
COD_FUNC,C.OBSERVACAO,
 DATA, CANCELADO, DATA_CANCEL, INADIM, DATVENCCARENCIA, C.STATUS,
 VARLOR_PARCELA, DATA_VENCIM, CONT_BENE, COBRADOR, CLIENTE,  CATEGORIA
 ORDER BY CL.NOME


2009/9/17 Giovani Rochê <giovaniroche em msn.com>

>
> Olha só o meu SELECT como é:
>  SELECT C.CODIGO,ATIVO ,C.COD_CLI, C.NUM_CONTR, COD_CAT,
> COD_FUNC,C.OBSERVACAO,
>  DATA, CANCELADO, DATA_CANCEL, INADIM, DATVENCCARENCIA, C.STATUS,
>  VARLOR_PARCELA, DATA_VENCIM, CONT_BENE, COBRADOR, CL.NOME AS CLIENTE,
> CT.DESCR AS CATEGORIA,
>  MIN(CR.DAT_VENC) AS INICIO, MAX(CR.DAT_VENC) AS FIM, MAX(CR.DAT_PAGTO) AS
> PGTO
>  FROM CONTRATO C,CLIENTE CL, CATEGORIA CT,  CONTA_A_RECEBER CR
>  WHERE C.COD_CLI = CL.CODIGO AND C.COD_CAT = CT.CODIGO
>  AND CR.COD_CLI = CL.CODIGO AND CR.COD_CONTR = C.CODIGO
>  AND CL.NOME LIKE '%'
>  AND ATIVO = 'S'
>  AND CANCELADO <> 'S'
>  AND C.STATUS = 0
>  GROUP BY C.CODIGO,ATIVO ,C.COD_CLI, C.NUM_CONTR, COD_CAT,
> COD_FUNC,C.OBSERVACAO,
>  DATA, CANCELADO, DATA_CANCEL, INADIM, DATVENCCARENCIA, C.STATUS,
>  VARLOR_PARCELA, DATA_VENCIM, CONT_BENE, COBRADOR, CLIENTE,  CATEGORIA
>  ORDER BY CL.NOME
>
> A questão aqui é o MAX(CR.DAT_PAGTO) AS PGTO .
> Eu quero  a maior data de pagamento da tabela CONTA_A_RECEBER quando o
> campo
> status desta mesma tabela for igual a 0.
>
> No caso o campo CR.STATUS nem aperece como uma cláusula pq não quero
> filtrá-lo.
>
> _________________________________________________________________
> Descubra todas as novidades do novo Internet Explorer 8
>
>
http://brasil.microsoft.com.br/IE8/mergulhe/?utm_source=MSN%3BHotmail&utm_me
dium=Tagline&utm_campaign=IE8
> ______________________________________________
> 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
>



-- 
Ronaldo Moreira

"Existem somente 10 tipos de pessoas no mundo inteiro: Aquelas que entendem
binário e aquelas que não entendem."
______________________________________________
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