Autor Tópico: RESOLVIDO: Criar SQL  (Lida 1005 vezes)

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
RESOLVIDO: Criar SQL
« Online: Julho 16, 2016, 03:05:43 pm »
Bom dia a todos e todas.

Estou sem conseguir criar um SQL para uma consulta e gostaria da ajuda dos colegas mais experientes.

- Tenho uma tabela (tbObjAp) de objetos apreendidos.

CAMPOS
idObjAp (chave)
nomObjAp

- Tenho uma tabela (tbObjApMov) do movimento dos onjetos apreendidos

CAMPOS
idObjApMov (chave)
idObjAp (chave)
nomMov
dtaMov

- Cadastro o objeto na primeira tabela e em seguida cadastro o movimento daquele objeto na segunda tabela, pois um objeto pode ter vários movimentos
que são: APREENDIDO; DEVOLVIDO; ENCAMINHADO, ETC, e cada movimento com uma data diferente.

A estrutura fica assim:


tbObjAp
idObjApnomObjAp
1REVÓLVER
2MACONHA
3VEÍCULO
///////////////////////////////////////////
tbObjApMov
idObjApMovidObjApnomMovdtaMov
11APREENDIDO10/06/2016
21ENVIADO IC11/06/2016
32APREENDIDO01/05/2016
42ENVIADO MP15/05/2016
53APREENDIDO07/02/2016

- No exemplo acima gostaria de montar a grid para mostrar o objeto apreendido e a última movimentação dele usando para isso a data mais recente.
Ficaria assim:

OBJETOSITUAÇÃODATA
REVÓLVERENVIADO IC11/06/2016
MACONHAENVIADO MP15/05/2016
VEÍCULOAPREENDIDO07/02/2016

Aí está a minha dificuldade. Como montar o SQL para mostrar apenas um registro de cada objeto, sendo sempre o de último movimento (dtaMov).

Espero ter conseguido explicar, e aguardo a ajuda dos colegas.

Obrigado.
« Última modificação: Julho 24, 2016, 06:33:03 pm por walterflorencio »

pessanha

  • Expert
  • *****
  • Mensagens: 643
    • Email
Re:Criar SQL
« Responder #1 Online: Julho 16, 2016, 10:38:23 pm »
sc_lookup(DS, "SELECT idObjApMov,idObjAp,nomMov,dtaMov
                                                  FROM tbObjApMov
                                        ORDER BY dtaMov DESC")

** <i>Aí está a minha dificuldade. Como montar o SQL para mostrar apenas um registro de cada objeto, sendo sempre o de último movimento (dtaMov). </i>**

Na configuracao do grid, vc pode colocar quantos registros por pagina.
« Última modificação: Julho 16, 2016, 10:41:37 pm por pessanha »

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
Re:Criar SQL
« Responder #2 Online: Julho 16, 2016, 11:37:31 pm »
Obrigado pela ajuda pessanha, mas da forma que o amigo sugeriu eu vou trazer todos os registros. O que eu preciso é do último movimento de casa objeto. Obrigado.

Kleyber

  • Expert
  • *****
  • Mensagens: 2235
    • Email
Re:Criar SQL
« Responder #3 Online: Julho 17, 2016, 09:53:35 am »
Tente assim:

sc_lookup(DS, "SELECT idObjApMov,idObjAp,nomMov,dtaMov
                                                  FROM tbObjApMov
                                        ORDER BY dtaMov DESC LIMIT 0,1")
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
Re:Criar SQL
« Responder #4 Online: Julho 17, 2016, 10:17:43 am »
Obrigado Kleiber.
Da forma que o amigo sugeriu retorna apenas um registro, aquele com data mais recente. A necessidade seria um registro de cada objeto com a data mais recente. Obrigado pela sua ajuda. Vou continuar tentando por aqui e se o amigo tiver outras dicas eu fico grato. Obrigado.

pessanha

  • Expert
  • *****
  • Mensagens: 643
    • Email
Re:Criar SQL
« Responder #5 Online: Julho 17, 2016, 11:01:14 am »
SELECT idObjApMov,idObjAp,nomMov,
MAX (dtaMov)      FROM tbObjApMov
 GROUP BY idObjAp

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
Re:Criar SQL
« Responder #6 Online: Julho 17, 2016, 11:07:41 am »
Eita pessanha. Estais perto. Fiz o teste e realmente só trouxe um registro de cada objeto, com a data mais recente, porém o campo nomMov veio o mesmo (APREENDIDO)para todos os registros. Obrigado.

pessanha

  • Expert
  • *****
  • Mensagens: 643
    • Email
Re:Criar SQL
« Responder #7 Online: Julho 17, 2016, 11:19:30 am »
Estou pesquisando por aqui.. Tbm tenho interesse nesta solucao. ..

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
Re:Criar SQL
« Responder #8 Online: Julho 17, 2016, 11:20:33 am »
Valeu eu tb estou queimando os restos de neurônios por aqui.

Kleyber

  • Expert
  • *****
  • Mensagens: 2235
    • Email
Re:Criar SQL
« Responder #9 Online: Julho 17, 2016, 12:01:47 pm »
Que tal:

SELECT idObjApMov,idObjAp,nomMov,
MAX (dtaMov)      FROM tbObjApMov
 GROUP BY dtaMov

OBS.: Não testei...
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
Re:Criar SQL
« Responder #10 Online: Julho 17, 2016, 07:49:35 pm »
Oi Kleyber. Ainda não. Desta forma repete o objeto. Obrigado. Vou tentando por aqui.

Jailton

  • Expert
  • *****
  • Mensagens: 2034
Re:Criar SQL
« Responder #11 Online: Julho 18, 2016, 12:57:59 am »
SELECT
  tbObjAp.nomObjAp,
  idObjApMov.nomMov,
  Max(idObjApMov.dtaMov) As DataUltimoMovimento
FROM
  tbObjAp
  INNER JOIN tbObjApMov ON tbObjAp.idObjAp=idObjApMmov.idObjAp
GROUP BY
  tbObjAp.nomObjAp,
  idObjApMov.nomMov
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
Re:Criar SQL
« Responder #12 Online: Julho 18, 2016, 02:34:52 pm »
Boa tarde colega Jailton. Obrigado pela ajuda. Mas como o colega pode ver, desta forma está retornando os cinco registros, enquanto que eu preciso que apareça apenas o último movimento de cada objeto, ou seja, deveria retornar apenas três registros. Estou tentando e agradeço e aguardo a sua ajuda. Obrigado.

Jailton

  • Expert
  • *****
  • Mensagens: 2034
Re:Criar SQL
« Responder #13 Online: Julho 18, 2016, 03:05:47 pm »
Boa tarde colega Jailton. Obrigado pela ajuda. Mas como o colega pode ver, desta forma está retornando os cinco registros, enquanto que eu preciso que apareça apenas o último movimento de cada objeto, ou seja, deveria retornar apenas três registros. Estou tentando e agradeço e aguardo a sua ajuda. Obrigado.

E só remover o status:

SELECT
  tbObjAp.nomObjAp,
  Max(idObjApMov.dtaMov) As DataUltimoMovimento
FROM
  tbObjAp
  INNER JOIN tbObjApMov ON tbObjAp.idObjAp=idObjApMmov.idObjAp
GROUP BY
  tbObjAp.nomObjAp


Nunca usou SQL?
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

walterflorencio

  • Intermediário
  • ***
  • Mensagens: 182
    • Email
Re:Criar SQL
« Responder #14 Online: Julho 18, 2016, 04:14:18 pm »
Obrigado mais uma vez Jailton. Respondendo a sua pergunta, eu uso SQL, mas não com a sua competência, é claro, mas desta forma que vc sugeriu eu já havia tentado, mas observe que o status (nomMov) é imprescindível que apareça na consulta, pois caso contrário ficaria intelingível ao usuário. Por isso preciso que o SQL retorne o OBJETO, a SITUAÇÃO dele e a DATA da referida situação, além de outros campos que não inclui aqui. Vou tentando aqui e aguardo a sua preciosa ajuda. Obrigado.