PRIMEIRAS OCORRÊNCIAS

SINCLAIR 28/11/2015 12:44:07
#454543
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.
DS2T 28/11/2015 16:00:22
#454545
Resposta escolhida
(Conteúdo removido por lerdice do usuário que postou haha)

Abraços!
SINCLAIR 28/11/2015 17:23:01
#454551
Obrigado, colega DS2T.

Vou testar e darei retorno.

Muito obrigado.

DS2T 28/11/2015 17:38:51
#454552
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
SINCLAIR 28/11/2015 18:10:34
#454553
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!
DS2T 28/11/2015 18:24:03
#454554
Essa nova solução que postei por último, ao perceber o erro que tinha cometido também não funcionou?
Abraços!
SINCLAIR 28/11/2015 19:34:53
#454555
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!

DS2T 28/11/2015 20:05:51
#454556
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!
SINCLAIR 28/11/2015 21:02:08
#454557
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!

Tópico encerrado , respostas não são mais permitidas