Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

notax

Consulta MySQL com limit e grup by

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.