PRIMEIRAS OCORRÊNCIAS
Prezados,
Estou apanhando para as funções min() e group by. Eita idade que não pára de crescer... eita neurônios que não param de falecer.
Tenho uma tabela de logs de acesso a determinados locais e preciso pegar o primeiro acesso de cada local, conforme exemplifico abaixo:
Banco: PostGreSQL
Tabela de origem: historico_acessos
-------------- -------------- -------------- --------------
dt_log hr_log usuario Local
-------------- -------------- -------------- --------------
28/11/2015 08:53:15 Fulano NEO_25
28/11/2015 08:20:15 Ciclano NEO_25
28/11/2015 08:17:27 Fulano NEO_27
28/11/2015 08:19:27 Fulano NEO_27
28/11/2015 09:25:00 Beltrano NEO_34
28/11/2015 10:11:20 Fulano NEO_25
Resultado desejado com a Query
(de cada local listar o primeiro acesso)
-------------- -------------- -------------- --------------
dt_log hr_log usuario Local
-------------- -------------- -------------- --------------
28/11/2015 08:20:15 Ciclano NEO_25
28/11/2015 08:17:27 Fulano NEO_27
28/11/2015 09:25:00 Beltrano NEO_34
Algum colega pode ajudar?
Tudo de bom.
Estou apanhando para as funções min() e group by. Eita idade que não pára de crescer... eita neurônios que não param de falecer.
Tenho uma tabela de logs de acesso a determinados locais e preciso pegar o primeiro acesso de cada local, conforme exemplifico abaixo:
Banco: PostGreSQL
Tabela de origem: historico_acessos
-------------- -------------- -------------- --------------
dt_log hr_log usuario Local
-------------- -------------- -------------- --------------
28/11/2015 08:53:15 Fulano NEO_25
28/11/2015 08:20:15 Ciclano NEO_25
28/11/2015 08:17:27 Fulano NEO_27
28/11/2015 08:19:27 Fulano NEO_27
28/11/2015 09:25:00 Beltrano NEO_34
28/11/2015 10:11:20 Fulano NEO_25
Resultado desejado com a Query
(de cada local listar o primeiro acesso)
-------------- -------------- -------------- --------------
dt_log hr_log usuario Local
-------------- -------------- -------------- --------------
28/11/2015 08:20:15 Ciclano NEO_25
28/11/2015 08:17:27 Fulano NEO_27
28/11/2015 09:25:00 Beltrano NEO_34
Algum colega pode ajudar?
Tudo de bom.
(Conteúdo removido por lerdice do usuário que postou haha)
Abraços!
Abraços!
Obrigado, colega DS2T.
Vou testar e darei retorno.
Muito obrigado.
Vou testar e darei retorno.
Muito obrigado.
Li aqui de novo e já vou te adiantando que acho que respondi cagada hahaha
Isso que te passei vai pegar a menor data e o menor horário, independente se o horário é referente a data ou não. Fora que o group by vai ficar escroto com aquele Id ali. Viajei bonito hahaha
SELECT
id,
local,
data,
MIN(hr_log) AS Horario
FROM
historico_acessos JOIN
(SELECT
MAX(id) AS id,
MIN(dt_log) AS Data,
local
FROM
historico_acessos
GROUP BY
local) AS T ON historico_acessos.id = T.id
GROUP BY
id, local, data
Isso que te passei vai pegar a menor data e o menor horário, independente se o horário é referente a data ou não. Fora que o group by vai ficar escroto com aquele Id ali. Viajei bonito hahaha
SELECT
id,
local,
data,
MIN(hr_log) AS Horario
FROM
historico_acessos JOIN
(SELECT
MAX(id) AS id,
MIN(dt_log) AS Data,
local
FROM
historico_acessos
GROUP BY
local) AS T ON historico_acessos.id = T.id
GROUP BY
id, local, data
Colega DS2T,
No primeiro caso funcionou muito bem.
No segundo caso, o qual seria o necessário por incluir o nome do usuário, duplicou toda a tabela ( tabela x 2 ).
Mas com a cuca mais fresca, amanhã (domingo) eu acredito que resolvo.
De qualquer forma te agradeço o empenho em postar suas idéias de solução.
Encerrarei o tópico na segunda-feira, com ou sem solução.
Tudo de bom!
No primeiro caso funcionou muito bem.
No segundo caso, o qual seria o necessário por incluir o nome do usuário, duplicou toda a tabela ( tabela x 2 ).
Mas com a cuca mais fresca, amanhã (domingo) eu acredito que resolvo.
De qualquer forma te agradeço o empenho em postar suas idéias de solução.
Encerrarei o tópico na segunda-feira, com ou sem solução.
Tudo de bom!
Essa nova solução que postei por último, ao perceber o erro que tinha cometido também não funcionou?
Abraços!
Abraços!
Boa noite, Colega DS2T
Mais uma vez te agradeço o empenho.
A última tentativa retornou 18 linhas para uma tabela com 11 registros. Pegou registros fora do perÃodo especificado, quando coloquei um where para a data de log ser 28/11/2015.
Deixa quieto, colega. é sábado a noite. Estamos todos exaustos.
Vou trabalhar em outras questões e na segunda-feira volto a este assunto.
Tudo de bom para ti, colega!
Mais uma vez te agradeço o empenho.
A última tentativa retornou 18 linhas para uma tabela com 11 registros. Pegou registros fora do perÃodo especificado, quando coloquei um where para a data de log ser 28/11/2015.
Deixa quieto, colega. é sábado a noite. Estamos todos exaustos.
Vou trabalhar em outras questões e na segunda-feira volto a este assunto.
Tudo de bom para ti, colega!
Ahh tá. Pensei que você queria selecionar a data mÃnima no banco também. Por isso essas queries loucas.
Dessa vez não tem erro. Eu até criei um banco de dados e testei hahaha Só que fiz em SQL Server, mas não deve dar problema algum.
SELECT
*
FROM
historico_acessos JOIN
(SELECT
MAX(historico_acessos.id) AS Id,
MIN(historico_acessos.hr_log) AS Horario
FROM
historico_acessos
WHERE
historico_acessos.dt_log=[ô]2015-11-28[ô]
GROUP BY
historico_acessos.local) AS T ON historico_acessos.id = T.id
No caso, seu Where fica dentro do sub-select.
Sobre estar exausto hahaha Pior que não cara. Desempregado, energia de sobra.. até mais do que eu gostaria hahaha O ponto alto da minha semana foi quando rasguei o pé num caco de piso e levei uns pontos.
Precisando de ajuda, dá um toque.
Valeu!
Dessa vez não tem erro. Eu até criei um banco de dados e testei hahaha Só que fiz em SQL Server, mas não deve dar problema algum.
SELECT
*
FROM
historico_acessos JOIN
(SELECT
MAX(historico_acessos.id) AS Id,
MIN(historico_acessos.hr_log) AS Horario
FROM
historico_acessos
WHERE
historico_acessos.dt_log=[ô]2015-11-28[ô]
GROUP BY
historico_acessos.local) AS T ON historico_acessos.id = T.id
No caso, seu Where fica dentro do sub-select.
Sobre estar exausto hahaha Pior que não cara. Desempregado, energia de sobra.. até mais do que eu gostaria hahaha O ponto alto da minha semana foi quando rasguei o pé num caco de piso e levei uns pontos.
Precisando de ajuda, dá um toque.
Valeu!
Colega DS2T,
Mais uma vez obrigado por sua ajuda.
Eu, na verdade, precisaria pegar a tabela de contas e buscar no log das contas quem foi o usuário que primeiro quitou a conta, além de diversos outros dados de várias outras tabelas.
Usei a tabela mais simples que informei no inÃcio do post porque se houvesse a lógica que o resolvesse, o resto seria adaptação.
Eu tinha conseguido quando vi seu post mais recente. Funciona também e é fácil de adaptar ao PostGreSQL (na verdade nada muda).
Vou encerrar o post e te pontuar, porque merece e muito.
Só para fins de curiosidade, caso queira, veja como ficou a minha View final (funcionando)...
Está em anexo, porque é tão longa, gigantesca que não caberia aqui dentro do espaço para texto (são 278 linhas de código na consulta SQL buscando do Adão até nossas décimas futuras gerações, lá do mais distante porvir).
Tudo de bom, Colega!
Mais uma vez obrigado por sua ajuda.
Eu, na verdade, precisaria pegar a tabela de contas e buscar no log das contas quem foi o usuário que primeiro quitou a conta, além de diversos outros dados de várias outras tabelas.
Usei a tabela mais simples que informei no inÃcio do post porque se houvesse a lógica que o resolvesse, o resto seria adaptação.
Eu tinha conseguido quando vi seu post mais recente. Funciona também e é fácil de adaptar ao PostGreSQL (na verdade nada muda).
Vou encerrar o post e te pontuar, porque merece e muito.
Só para fins de curiosidade, caso queira, veja como ficou a minha View final (funcionando)...
Está em anexo, porque é tão longa, gigantesca que não caberia aqui dentro do espaço para texto (são 278 linhas de código na consulta SQL buscando do Adão até nossas décimas futuras gerações, lá do mais distante porvir).
Tudo de bom, Colega!
Tópico encerrado , respostas não são mais permitidas