notax 0 Report post Posted May 16, 2011 Pessoal, bom dia! Tenho uma consulta por ASP a um bd mysql que tá me quebrando a cabeça... O que ocorre é que nessa tabela tem os seguintes campos: serial, data, hora Preciso mostrar apenas o registro mais atual de cada serial, mas considerando todos os seriais na mesma consulta... O que fiz foi: sql = "select * from minhatabela order by data desc, hora desc limit 1" O que ocorre é que ele mostra apenas um registro na consulta... ou seja, apenas de uma serial... e eu precisava que ele mostrasse os últimos inseridos de todas seriais... Onde está meu erro? IMPORTANTE: postei apenas um trecho da consulta, visto que na consulta real existem outros comparativos com outras tabelas... Valews Share this post Link to post Share on other sites
Vinicius Ianni 189 Report post Posted May 16, 2011 Testou assim ? select * from tabela order by data desc group by hora limit 0,1 Não testei a query, pois estou sem o mysql query browser neste micro, mas acho que seria mais ou menos assim a query Testei agora, a query ficou assim: select * from tabela group by hora order by data desc limit 0,1 Note que com o limit em 0,1 ele só irá retornar 1 registro, que no caso é o mais recente. Share this post Link to post Share on other sites
notax 0 Report post Posted July 11, 2011 Obrigado pelo retorno, estava fazendo vários testes... Olha só, se eu tivesse usando access bastaria eu fazer algo do tipo: sql = "select top 1 codigo from minha_tabela where condicao1 = '"&condicional1&"' order by codigo desc" Ou seja, como o campo código é autonumerico nesse recordset eu teria todos os últimos registros que entraram na tabela e obedecerem a condicional1... Se eu tento fazer isso em mysql não dá certo... mesmo que eu coloque desta forma: sql = "select codigo from minha_tabela where condicao1 = '"&condicional1&"' order by codigo desc limit 1" O que acontece no mysql é que ele colocará o primeiro registro que ele encontre e obedeça a condicional, e não necessáriamente na ordem que eu gostaria, ex. o de maior código, ou seja, o último entrante... Sacaram? Alguém sabe onde estou errando? Share this post Link to post Share on other sites
Marrabel 20 Report post Posted July 11, 2011 para que eu entenda melhor...voce só vai mostrar o ultimo serial cadastrado comparando a data e hora? se for tente: select * from tabela group by data,hora desc order by id desc limit 1 Espero ter ajudado Share this post Link to post Share on other sites
Vinicius Ianni 189 Report post Posted July 11, 2011 Testei numa tabela aqui e tive como resultado o ultimo registo inserido: select * from tabela order by id DESC limit 0,1 Colocando um where na clausula: select * from produtos where marca ="marca" order by id DESC limit 0,1 Share this post Link to post Share on other sites
notax 0 Report post Posted July 11, 2011 Uhm... assim, o que eu tenho é a tabela da seguinte forma: codigo | serial | data_hora | texto | condicao Nessa tabela posso ter vários registros de várias seriais iguais exemplo: 1 | s123 | 2011-07-10 13:15:10 | bla bla bla a | condicao2 2 | s123 | 2011-07-10 13:16:10 | bla bla bla b | condicao2 3 | s123 | 2011-07-10 13:17:10 | bla bla bla c | condicao1 4 | s356 | 2011-07-10 13:18:10 | bla bla bla d | condicao1 5 | s356 | 2011-07-10 13:19:10 | bla bla bla e | condicao2 6 | s356 | 2011-07-10 13:20:10 | bla bla bla f | condicao2 7 | s356 | 2011-07-10 13:21:10 | bla bla bla g | condicao1 Quero uma consulta que me mostre apenas os registros onde condicao seja = condicao2 e que tenham a maior data, pegando apenas uma serial... no caso acima os registros que eu queria são apenas: 2 | s123 | 2011-07-10 13:16:10 | bla bla bla b | condicao2 6 | s356 | 2011-07-10 13:20:10 | bla bla bla f | condicao2 Sacaram? Como devo fazer isso? Share this post Link to post Share on other sites
Marrabel 20 Report post Posted July 11, 2011 Uhm... assim, o que eu tenho é a tabela da seguinte forma: codigo | serial | data_hora | texto | condicao Nessa tabela posso ter vários registros de várias seriais iguais exemplo: 1 | s123 | 2011-07-10 13:15:10 | bla bla bla a | condicao2 2 | s123 | 2011-07-10 13:16:10 | bla bla bla b | condicao2 3 | s123 | 2011-07-10 13:17:10 | bla bla bla c | condicao1 4 | s356 | 2011-07-10 13:18:10 | bla bla bla d | condicao1 5 | s356 | 2011-07-10 13:19:10 | bla bla bla e | condicao2 6 | s356 | 2011-07-10 13:20:10 | bla bla bla f | condicao2 7 | s356 | 2011-07-10 13:21:10 | bla bla bla g | condicao1 Quero uma consulta que me mostre apenas os registros onde condicao seja = condicao2 e que tenham a maior data, pegando apenas uma serial... no caso acima os registros que eu queria são apenas: 2 | s123 | 2011-07-10 13:16:10 | bla bla bla b | condicao2 6 | s356 | 2011-07-10 13:20:10 | bla bla bla f | condicao2 Sacaram? Como devo fazer isso? Ao meu ver, o exemplo do resultado que voce deixou tá errado ou voce não explicou direito ainda. Se voce quer apenas um registro da ultima data onde a condicao =2 então seria somente o id 6. Mas enfim... Eh só seguir a ideia que passamos "select * from tabela where condicao="condicao2" group by data desc order by id desc" Espero ter ajudado. Share this post Link to post Share on other sites
notax 0 Report post Posted July 11, 2011 Então... essa é a dificuldade... mas repare que eu quero o da última data com a condicional2, mas isso para cada serial sacou? Ou seja, repare que no exemplo que dei, os seriais elencados são diferentes... Então... tem alguma sugestão nesse sentido? Share this post Link to post Share on other sites
Marrabel 20 Report post Posted July 11, 2011 Então... essa é a dificuldade... mas repare que eu quero o da última data com a condicional2, mas isso para cada serial sacou? Ou seja, repare que no exemplo que dei, os seriais elencados são diferentes... Então... tem alguma sugestão nesse sentido? Se eu entendi bem...digamos que os serials são "mini-categorias" que possuem um certo grupo de itens. Certo? Caso seja, inclua na condição: select * from tabela where condicao=2 and serial="s123" group by data desc order by id desc limit 1 Abrç... Share this post Link to post Share on other sites
notax 0 Report post Posted July 11, 2011 Aí bateu na trave do que eu quero... A grande questão é essa... quero que pegue os registros mais atuais de TODOS os seriais... sacou? Da forma que você fez funciona, mas apenas para um serial, se eu tiro do where serial = '' ele me traz os registros, no entanto não me traz os mais atuais e sim os primeiros que ele encontra no banco... Se fosse em access isso estaria funcionando a horas, mas em mysql não to conseguindo... Share this post Link to post Share on other sites
Marrabel 20 Report post Posted July 11, 2011 Aí bateu na trave do que eu quero... A grande questão é essa... quero que pegue os registros mais atuais de TODOS os seriais... sacou? Da forma que você fez funciona, mas apenas para um serial, se eu tiro do where serial = '' ele me traz os registros, no entanto não me traz os mais atuais e sim os primeiros que ele encontra no banco... Se fosse em access isso estaria funcionando a horas, mas em mysql não to conseguindo... Tá mas este tipo de filtro é para um site ? E você só vai mostrar o ultimo item ou ele vem de algum formulário? Share this post Link to post Share on other sites
Vinicius Ianni 189 Report post Posted July 11, 2011 Vou mover o topico para o pessoal do Mysql, acho que lá terão mais facilmente uma solução para sua duvida. Share this post Link to post Share on other sites
notax 0 Report post Posted July 11, 2011 Uhm, preferia não mover... acho que o caso é asp mesmo... É para um site, mas não vem de formulário nenhum, veja, o que eu quero na realidade é o seguinte: A mesma query tem que ter distinct (para pegar uma serial de cada), order by, limit, fora a cláusula de where... Não sei... mas pra mim é alguma coisa na minha sintaxe que não tá batendo... como disse em access roda perfeitão... Share this post Link to post Share on other sites
Marrabel 20 Report post Posted July 13, 2011 Uhm, preferia não mover... acho que o caso é asp mesmo... É para um site, mas não vem de formulário nenhum, veja, o que eu quero na realidade é o seguinte: A mesma query tem que ter distinct (para pegar uma serial de cada), order by, limit, fora a cláusula de where... Não sei... mas pra mim é alguma coisa na minha sintaxe que não tá batendo... como disse em access roda perfeitão... Creio que o distinct seja para se referenciar a tabelas aninhadas a esta. Se voce estiver usando outras tabelas que sejam relacionadas a esta, mostre aqui para que fique mais claro para nos. Este filtro voce vai utilizar como em seu site? Share this post Link to post Share on other sites
dantas69 0 Report post Posted August 3, 2011 Precisei de algo semelhante, encontrei a solução neste post:Clique aqui No começo foi complicado, depois entendi a lógica. Se precisar de ajuda é só avisar. Share this post Link to post Share on other sites
marcelocardoso 6 Report post Posted June 3, 2016 pessoal, obrigado pela atenção...mas já consegui resolver assim, mt obrigado mesmo assim... bom dia p todos.. valeu... SQL = "SELECT * FROM clientes ORDER BY id DESC LIMIT " & (PaginaAtual - 1) * pageSize & " , " & pageSize Share this post Link to post Share on other sites