[firebase-br] Select com group by
Sandro Souza
escovadordebits em gmail.com
Qua Maio 27 14:39:54 -03 2009
Bom dia/tarde Marcelo.
Grande Marcelo, então vamos alterar a lógica da consulta.
Tente o seguinte código:
SELECT
COUNT(*),
DESCRICAO
FROM (
SELECT
FS.DESCRICAO
FROM
FOLLOWUP_STATUS FS,
FOLLOWUP F
WHERE
(F.ID_FOLLOWUP_STATUS = FS.ID_FOLLOWUP_STATUS)AND
EXISTS(
SELECT
FO.ID_FOLLOWUP
FROM
FOLLOWUP_OCORRENCIA FO
WHERE
(FO.ID_FOLLOWUP = F.ID_FOLLOWUP)AND
(FO.DATA = CURRENT_DATE))) X
GROUP BY
DESCRICAO
Espero ter ajudado mais que atrapalhado. :D
2009/5/27 Marcelo Moreira <marcelomoreira.souza em gmail.com>
> Sandro,
> Brigado pela atenção cara!
>
> Mas seu exemplo tambem nao funcionou e esta retornando mais registros do
> que deveria.
> Como voce disse na tabela FOLLOWUP_STATUS eu tenho apenas dois registros
> 1 - PENDENTE
> 2 - CONCLUIDO
> O fato é que agora todos os registros da tabela FOLLOWUP tem
> ID_FOLLOWUP_STATUS = 1
> ou seja todos esta pendentes.
> O resultado que eu preciso ter é:
>
> COUNT = 5
> DESCRICAO = 'PENDENTE'
>
> pois na tabela FOLLOWUP tenho apenas 5 registros e na tabela
> FOLLOWUP_OCORRENCIA tenho 19 registros
>
> Esse ta dificil ... mas vamo que vamo!
>
> Abraços!
>
>
> Em 27/05/09, Sandro Souza <escovadordebits em gmail.com> escreveu:
>
>> Bom dia/tarde Marcelo.
>>
>> Grande Marcelo, por gentileza, teste primeiro o seguinte código:
>>
>> SELECT
>> COUNT(*),
>> DESCRICAO
>> FROM (
>> SELECT
>> FS.DESCRICAO
>> FROM
>> FOLLOWUP_OCORRENCIA FO,
>> FOLLOWUP F,
>> FOLLOWUP_STATUS FS
>> WHERE
>> (FO.DATA = CURRENT_DATE)AND
>> (F.ID_FOLLOWUP = FO.ID_FOLLOWUP)AND
>> (FS.ID_FOLLOWUP_STATUS = F.ID_FOLLOWUP_STATUS)) X
>> GROUP BY
>> DESCRICAO
>>
>> Caso não retorne a quantidade esperada, pode ser que seja o produto
>> cartesiano entre essas 3 tabelas, já que a descrição não está na tabela
>> FOLLOWUP, mas sim em uma terceira tabela (FOLLOWUP_STATUS) que também pode
>> ter mais de um registro com o mesmo ID_FOLLOWUP.
>>
>> Por favor, poste o resultado para que possamos lhe ajudar.
>>
>> Espero ter ajudado mais que atrapalhado. :D
>>
>> 2009/5/26 Marcelo Moreira <marcelomoreira.souza em gmail.com>
>>
>>> Pessoal,
>>> Vejam o sql abaixo:
>>>
>>>
>>> select
>>> count(*),
>>> FS.DESCRICAO
>>> from
>>> FOLLOWUP F
>>> inner join FOLLOWUP_OCORRENCIA FO on (F.ID_FOLLOWUP = FO.ID_FOLLOWUP)
>>> inner join FOLLOWUP_STATUS FS on (F.ID_FOLLOWUP_STATUS =
>>> FS.ID_FOLLOWUP_STATUS)
>>> where
>>> FO.DATA = current_date
>>> group by
>>> 2
>>>
>>> Ele esta retornornando 19 registros quando na verdade o que eu preciso é
>>> que
>>> ele retorne apenas os 5 que tiveram ocorrencia no dia. O que acontece é
>>> que
>>> para cada registro na tabela FOLLOWUP eu posso ter mais de um registro
>>> relacionado na tabela FOLLOWUP_OCORRENCIA e pode ter mais de uma
>>> ocorrencia
>>> no mesmo dia para o registro da tabela FOLLOWUP.
>>> Como eu poderia resolver este select?
>>> Existe a possibilidade de encaixar um distinct(ID_FOLLOWUP) ou algo do
>>> tipo
>>> neste select?
>>>
>>> Obrigado pela atenção.
>>>
>>>
>>>
>>> Marcelo
>>> ______________________________________________
>>> 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