notax 0 Denunciar post Postado Maio 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 Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Ianni 189 Denunciar post Postado Maio 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. Compartilhar este post Link para o post Compartilhar em outros sites
notax 0 Denunciar post Postado Julho 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? Compartilhar este post Link para o post Compartilhar em outros sites
Marrabel 20 Denunciar post Postado Julho 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 Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Ianni 189 Denunciar post Postado Julho 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 Compartilhar este post Link para o post Compartilhar em outros sites
notax 0 Denunciar post Postado Julho 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? Compartilhar este post Link para o post Compartilhar em outros sites
Marrabel 20 Denunciar post Postado Julho 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. Compartilhar este post Link para o post Compartilhar em outros sites
notax 0 Denunciar post Postado Julho 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? Compartilhar este post Link para o post Compartilhar em outros sites
Marrabel 20 Denunciar post Postado Julho 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ç... Compartilhar este post Link para o post Compartilhar em outros sites
notax 0 Denunciar post Postado Julho 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... Compartilhar este post Link para o post Compartilhar em outros sites
Marrabel 20 Denunciar post Postado Julho 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? Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Ianni 189 Denunciar post Postado Julho 11, 2011 Vou mover o topico para o pessoal do Mysql, acho que lá terão mais facilmente uma solução para sua duvida. Compartilhar este post Link para o post Compartilhar em outros sites
notax 0 Denunciar post Postado Julho 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... Compartilhar este post Link para o post Compartilhar em outros sites
Marrabel 20 Denunciar post Postado Julho 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? Compartilhar este post Link para o post Compartilhar em outros sites
dantas69 0 Denunciar post Postado Agosto 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. Compartilhar este post Link para o post Compartilhar em outros sites
marcelocardoso 6 Denunciar post Postado Junho 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 Compartilhar este post Link para o post Compartilhar em outros sites