Ajuda em SQL

21/11/2009

1

Bom dia pessoal, Estou com problema com a query abaixo:   select historicoenvelope.codmovimento, envelope.codenvelope, funcionario.nome,
setor.nome, historicoenvelope.data, historicoenvelope.hora from
historicoenvelope, envelope, funcionario, setor
where setor.codsetor = historicoenvelope.codsetor and
funcionario.codfuncionario = historicoenvelope.codfuncionario and
envelope.codenvelope = historicoenvelope.codenvelope
order by historicoenvelope.codmovimento   Então pessoal, eu gostaria de fazer a pesquisa para selecionar somente os dois registros marcados com a seta vermelha, ou seja, somente os registros onde o codmocimento for o maior de cada codenvelope. Abraços,   Wanderson Ramos
Responder

Posts

27/11/2009

Adriano Silva

Só uma pergunta...

O nome da pessoa que vai aparecer será sempre o mesmo quando o "codEnvelope" for igual?
Se for igual é simples basta você usar um max e group by.

Exemplo:

SELECT max(codMovimento), codEnvelope, Nome
FROM tabela
GROUP BY codEnvelope, Nome

Boa diversão...

Abraço...
Responder
Correto, Adriano   Quando o "codEnvelope" for igual o nome da pessoas será sempre o mesmo. Só que eu tenho a movimentação do envelope "codmovimento", onde eu preciso buscar somente o maior movimento (ou seja, o maior "codmovimento"). Fiz assim, mas dá erro!   select max(historicoenvelope.codmovimento), envelope.codenvelope, funcionario.nome,
setor.nome, historicoenvelope.data, historicoenvelope.hora from
historicoenvelope, envelope, funcionario, setor
where setor.codsetor = historicoenvelope.codsetor and
funcionario.codfuncionario = historicoenvelope.codfuncionario and
envelope.codenvelope = historicoenvelope.codenvelope
group by historicoenvelope.codmovimento, envelope.codenvelope   Se você puder dar uma olhada e me ajudar, ficarei muito grato.   Abraços,   Wanderson Ramos Queiroz Buritizeiro Minas Gerais Brasil
Responder

03/12/2009

Bruno Batista

Bom dia,

verifica se assim funcionará.

select h.codmovimento,
       e.codenvelope,
       f.nome,
       s.nome,
       h.data,
       h.hora
  from historicoenvelope h,
       envelope e,
       funcionario f,
       setor s
 where s.codsetor = h.codsetor
   and f.codfuncionario = h.codfuncionario
   and e.codenvelope = h.codenvelope
   and (h.codmovimento,e.codenvelope) in (select max(h1.codmovimento),
                                                 h1.codenvelope
                                            from historicoenvelope h1
                                           group by h1.codenvelope)
group by h.codmovimento,
         e.codenvelope

Atenciosamente,

Bruno Moreira Batista.
Responder
Bruno,

Valeu pela ajuda, mas está dando o seguinte erro:

Error: *** IBPP::SQLException ***
Context: Statement::Prepare( select h.codmovimento,
      e.codenvelope,
      f.nome,
      s.nome,
      h.data,
      h.hora
  from historicoenvelope h,
      envelope e,
      funcionario f,
      setor s
where s.codsetor = h.codsetor
  and f.codfuncionario = h.codfuncionario
  and e.codenvelope = h.codenvelope
  and (h.codmovimento, e.codenvelope) in (select max(h1.codmovimento),
                                                h1.codenvelope
                                            from historicoenvelope h1
                                          group by h1.codenvelope)
group by h.codmovimento,
        e.codenvelope )
Message: isc_dsql_prepare failed

SQL Message : -104
Invalid token

Engine Code    : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 14, column 23
Responder
tente assim:

select
  he.codmovimento,
  e.codenvelope,
  f.nome Funcionario,
  s.nome Setor,
  he.data,
  he.hora
from
  historicoenvelope he
inner join
  envelope e on e.codenvelope = he.codenvelope
inner join
  funcionario f on f.codfuncionario = he.codfuncionario
inner join
  setor s on s.codsetor = he.codsetor
where
  he.codmovimento = (select max(h1.codmovimento)
                     from historicoenvelope h1
                     where h1.codenvelope = he.codenvelope)

Responder
Emerson

Boa noite,

VOCÊ É O CARA!!! Funcionou perfeitamente. Era isso que eu precisava.

V A L E U  P E L A  A J U D A !


Abraços,


Wanderson Ramos Queiroz
Buritizeiro - MG
Brasil
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira