ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

FireBird Having

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
edu666ardo
Novato
Novato


Registrado: Sábado, 5 de Março de 2011
Mensagens: 2

MensagemEnviada: Ter Mar 18, 2014 10:43 am    Assunto: FireBird Having Responder com Citação

Bom dia.

Possuo uma tabela com:
ID,ID_SOLICITACAO,MES,DATA ,HORA,ID_CLIENTE
Tenho registros duplicados de solicitações no mês, preciso excluir os registros duplicados onde a data seja mais antiga.
Trabalhava com MySQL e era tranquilo de montar esta SQL.

SELECT * FROM TABELA T
WHERE ID_CLIENTE=1
GRUOP BY ID_SOLICITACAO,MES
HAVING COUNT(ID_SOLICITACAO) >1
ORDER BY ID_SOLICITACAO,DATA DESC, HORA DESC


No Firebrird não posso declarar no group by menos campos do que declarei no select, desta forma não consigo montar uma SQL que me retorne os itens corretos para excluir.

select h.ID,
h.ID_SOLICITACAO,
h.MES,
h.DATA,
h.HORA,count(h.ID_SOLICITACAO)
from HISTORICO h
where
h.ID_CLIENTE=1
group by h.ID_SOLICITACAO,h.MES,h.DATA,h.HORA,h.ID
having count(h.ID_SOLICITACAO) > 1
order by h.ID_SOLICITACAO, h.DATA asc, h.HORA desc



Como poderia montar esta consulta?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Mar 18, 2014 3:21 pm    Assunto: Responder com Citação

Boa tarde,

Qual versão do Firebird você está utilizando?
De que tipo são os campos Data e Hora?

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-são_paulo-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
thomazs
Moderador
Moderador


Registrado: Segunda-Feira, 1 de Março de 2004
Mensagens: 2835

MensagemEnviada: Qui Mar 20, 2014 10:53 pm    Assunto: Responder com Citação

Isso não serviria?

Código:
delete from
Tabela
where
    id_cliente = 1
    and (select count(*) from tabela t where t.id_cliente=1 and t.id_solicitacao=tabela.id_solicitacao and t.mes=tabela.mes)>1
    and (select min(t.data) from tabela t where t.id_cliente=1 and t.id_solicitacao=tabela.id_solicitacao and t.mes=tabela.mes)=data

_________________
Suporte e Consultoria em Desenvolvimento de Sistemas
Bacharel em Sistemas de Informação
Especialista em Bancos de Dados
Desenvolvimento: Clipper, Delphi, PHP, Python/Django
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger 
edu666ardo
Novato
Novato


Registrado: Sábado, 5 de Março de 2011
Mensagens: 2

MensagemEnviada: Seg Mar 31, 2014 10:49 am    Assunto: Responder com Citação

Bom dia Thomazs.

Muito obrigado, este delete me ajudou.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular  
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB