[Cascavel-pm] OFF - Select Mysql

Renato Santos renato.cron em gmail.com
Domingo Novembro 18 14:17:47 PST 2012


CREATE TEMP TABLE _tmp AS
SELECT *Max*(dt_ocorrencia_aud) AS max,
                          cd_funcionario
                   FROM   aud_folhfuncionario
                   GROUP  BY cd_funcionario;

SELECT *
FROM   aud_folhfuncionario AS a
       INNER JOIN _tmp AS b
               ON a.dt_ocorrencia_aud = b.max
                  AND a.cd_funcionario = b.cd_funcionario
WHERE  a.cd_situacao <> 9


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>
>
>


-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron <http://twitter.com/#!/renato_cron>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20121118/c32ed156/attachment-0001.html>


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