[Cascavel-pm] OFF - Select Mysql

Eduardo Maia maia em eduardomaia.com
Segunda Novembro 19 08:58:56 PST 2012


A solicitação do desenvolvedor foi:

"Preciso fazer um select onde mostra dos dados *do ultimo registro*."

"mostra todos os registro em ordem de data, porem *quero somente o ultimo*."

Para trazer apenas um registro, o último ou o primeiro (dependendo do order
by), utiliza-se em MySQL o *LIMIT*. Dei inclusive dois exemplos no email
anterior.

select * from produto order by rand() *limit 1*

select nome from lojista where email like '%gmail%' *limit 1*

É possível colocar (por exemplo) limit 3 se for para trazer 3 registros -
mais uma vez, os 3 últimos ou 3 primeiros, dependendo do order by.

Não ficou claro? Viajei em alguma coisa?


2012/11/19 Renato Santos <renato.cron em gmail.com>

> ???!
> Em 19/11/2012 12:05, "Eduardo Maia" <maia em eduardomaia.com> escreveu:
>
> Sugiro utilizar *LIMIT 1*
>>
>> select * from produto order by rand() limit 1
>>
>> select nome from lojista where email like '%gmail%' limit 1
>>
>> Abs
>>
>>
>> 2012/11/18 Renato Santos <renato.cron em gmail.com>
>>
>>> pensei q vc já tinha 2 tabelas separadas com o funcionario.
>>>
>>> já que não tem, tem q agrupar por todas as colunas.
>>>
>>> SELECT a.cd_funcionario,
>>>        a.nm_funcionario,
>>>        a.cd_cargofuncao,
>>>        a.cd_situacao,
>>>        a.dt_admissao,
>>>        a.dt_ocorrencia_aud
>>> FROM   aud_folhfuncionario AS a
>>>        INNER JOIN (SELECT *Max*(dt_ocorrencia_aud)AS dt_ocorrencia_aud,
>>>                           cd_funcionario,
>>>                           cd_cargofuncao,
>>>                           cd_situacao
>>>                    FROM   aud_folhfuncionario
>>>                    GROUP  BY cd_funcionario) AS b
>>>                ON a.dt_ocorrencia_aud = b.dt_ocorrencia_aud
>>>                   AND a.cd_cargofuncao = b.cd_cargofuncao
>>>                   AND a.cd_situacao = b.cd_situacao
>>> WHERE  a.cd_situacao <> 9
>>> *GROUP BY 1,2,3,4,5,6; *
>>>
>>>
>>> 2012/11/18 Sammuel Souza <sammuel.souza em gmail.com>
>>>
>>>> Consegui pegar o ultimo registro porem mostra todos
>>>>
>>>> select
>>>> a.cd_funcionario,a.nm_funcionario,a.cd_cargofuncao,a.cd_Situacao,a.Dt_admissao,a.dt_ocorrencia_aud
>>>> from AUD_FOLHFuncionario as a inner join (select max(dt_ocorrencia_AUD)as
>>>> dt_ocorrencia_aud,cd_funcionario,cd_cargofuncao,cd_Situacao from
>>>> AUD_FOLHFuncionario group by cd_funcionario) as b on a.dt_ocorrencia_aud =
>>>> b.dt_ocorrencia_aud and a.cd_cargofuncao=b.cd_cargofuncao and
>>>> a.cd_Situacao=b.cd_Situacao where a.cd_Situacao<>9;
>>>>
>>>>
>>>>
>>>> Sammuel
>>>>
>>>> Em 18 de novembro de 2012 16:56, Renato Santos <renato.cron em gmail.com>escreveu:
>>>>
>>>> Uma maneira de fazer isso é fazer uma subconsulta sobre um select com o
>>>>> id do funcionario + a ultima data.
>>>>>
>>>>> SELECT *
>>>>> FROM ...
>>>>> WHERE
>>>>> (cd, data_ocorrencia) = (
>>>>>     SELECT cd, max(data_ocorrencia)
>>>>>     FROM ..
>>>>>     GROUP BY cd;
>>>>> )
>>>>>
>>>>> porém nem todos os bancos suportam esse tipo de comparação em
>>>>> conjunto. Postgres funciona.
>>>>>
>>>>> Em mysql talvez você precise colocar isso num inner join:
>>>>> SELECT *
>>>>> FROM tabela_func me, outras..
>>>>> INNER JOIN (cd, data_ocorrencia) = (
>>>>>     SELECT cd, max(data_ocorrencia)
>>>>>     FROM ..
>>>>>     GROUP BY cd;
>>>>> ) sub ON (sub.cd = me.cd AND sub.max = me.data_ocorrencia)
>>>>>
>>>>>  Boa sorte,
>>>>>
>>>>> nao cheguei a testar, só é a ideia mesmo
>>>>>
>>>>> 2012/11/18 Sammuel Souza <sammuel.souza em gmail.com>
>>>>>
>>>>>> Boa Tarde,
>>>>>>
>>>>>> sei que o forum é de PERL porem nao participo de forum MySQL
>>>>>>
>>>>>> Caso alguem puder me ajudar.
>>>>>>
>>>>>> cd    funcionario        cd_Funcao    cd_situ        data_ocorrencia
>>>>>> 2    ANTANA ODESTO        62        1        2004-08-09 09:30:33
>>>>>> 2    ANTANA ODESTO        78        1        2009-05-21 10:06:24
>>>>>> 2    ANTANA ODESTO        62        1        2010-10-26 08:43:12
>>>>>> 6    ALTER LVES DO        55        1        2005-04-15 10:44:14
>>>>>> 6    ALTER LVES DO        84        1        2012-01-24 17:16:40
>>>>>> 6    ALTER LVES DO        84        1        2012-09-06 16:53:47
>>>>>> 11    NESIO ONSALVES        60        1        2004-08-09 11:59:56
>>>>>> 11    NESIO ONSALVES        60        99        2010-08-25 10:43:32
>>>>>>
>>>>>> a tabela Funcionarios cria outro registro para o funcionario quando
>>>>>> muda os dados assim incluindo a data da alteracao, pois o registro que
>>>>>> serve é o com a data maior.
>>>>>>
>>>>>> Preciso fazer um select onde mostra dos dados do ultimo registro.
>>>>>>
>>>>>> Group by
>>>>>>
>>>>>> select * from uncionario where cd_situ<>99 group by cd_funcionario;
>>>>>>
>>>>>> mostra assim:
>>>>>> 2    ANTANA ODESTO        62        1        2004-08-09 09:30:33
>>>>>> 6    ALTER LVES DO        55        1        2005-04-15 10:44:14
>>>>>> 11    NESIO ONSALVES        60        1        2004-08-09 11:59:56
>>>>>>
>>>>>> select * from uncionario where cd_situ<>99 group by
>>>>>> cd_funcionario,data_ocorrencia DESC;
>>>>>>
>>>>>> mostra todos os registro em ordem de data, porem quero somente o
>>>>>> ultimo.
>>>>>>
>>>>>> Alguem poderia me ajudar?
>>>>>>
>>>>>> _______________________________________________
>>>>>> Cascavel-pm mailing list
>>>>>> Cascavel-pm em pm.org
>>>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Saravá,
>>>>> Renato CRON
>>>>> http://www.renatocron.com/blog/
>>>>> @renato_cron <http://twitter.com/#!/renato_cron>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> _____________________
>>>>  Şặммµεℓ΅
>>>>
>>>>
>>>> _______________________________________________
>>>> Cascavel-pm mailing list
>>>> Cascavel-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>
>>>
>>>
>>>
>>> --
>>> Saravá,
>>> Renato CRON
>>> http://www.renatocron.com/blog/
>>> @renato_cron <http://twitter.com/#!/renato_cron>
>>>
>>>
>>> _______________________________________________
>>> Cascavel-pm mailing list
>>> Cascavel-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>
>>
>>
>> _______________________________________________
>> Cascavel-pm mailing list
>> Cascavel-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20121119/a6159b26/attachment-0001.html>


Mais detalhes sobre a lista de discussão Cascavel-pm