[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