Ir para conteúdo
JHenry

Como selecionar linhas distintas depois de ordenar e agrupar?

Recommended Posts

Fala pessoa, blz!?

 

Tenho uma dúvida que empacou todo o meu projeto e preciso muito de ajuda!

 

É o seguinte... dado a tabela abaixo:

post    |   data    |   tags
--------+-----------+-------
post3   |   2016    |   bbb
post1   |   2018    |   aaa
post2   |   2017    |   ccc
post1   |   2018    |   bbb
post3   |   2016    |   aaa
post2   |   2017    |   bbb
post2   |   2017    |   bbb
post1   |   2018    |   ccc
post3   |   2016    |   ccc

 


Eu quero obter como resultado final a seguinte tabela:

post    |   data    |   tags
------- +---------- +--------
post1   |   2018    |   aaa
post2   |   2017    |   bbb
post3   |   2016    |   ccc

 


Ou seja, o que que eu quero fazer é: Primeiramente, ordenar a tabela em função de uma coluna (que neste caso é a coluna data). Quero, em segunda lugar, agrupar em função duma outra coluna (que neste caso é a coluna tag). E quero, por fim, que o resultado da coluna post não se repita.

A primeira e a segunda parte eu sei fazer. Eu aplico a query abaixo...

OBS: A ordem não precisa ser necessariamente esta acima...

SELECT post, `data`, tag
FROM tabela AS t1
WHERE t1.`data` = (
    SELECT MAX(t2.`data`) 
    FROM tabela AS t2 
    WHERE t1.tag = t2.tag
) 

 


... e obtenho o seguinte resultado:

post    |   data    |   tags
------- +---------- +--------
post1   |   2018    |   aaa
post1   |   2018    |   bbb
post1   |   2018    |   ccc

 


O problema, como vocês podem ver, é que o post1 se repete para todas as tags. E eu não quero que isso aconteça. Quero que todas as linhas sejam preenchidas inteligentemente em função do maior valor dado pela coluna data, mas sem haver repetição na coluna post.

 

Como posso fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT post, `data`, tag
FROM tabela AS t1
WHERE t1.`data` = (
    SELECT MAX(t2.`data`) 
    FROM tabela AS t2 
    WHERE t1.tag = t2.tag
    and t1.post = t2.post
) 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 hours ago, Motta said:

SELECT post, `data`, tag
FROM tabela AS t1
WHERE t1.`data` = (
    SELECT MAX(t2.`data`) 
    FROM tabela AS t2 
    WHERE t1.tag = t2.tag
    and t1.post = t2.post
) 

 

 

Não funcionou...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por DZ22
      Estou aprendendo WebService no meu curso de programação, e criamos agora um arquivo PHP com umas 4 variáveis q vão armazenar os dados de conexão com o Banco de Dados q é o MySQL ($HostName, $HostUser, $HostPass, $DatabaseName). Mas eu preciso testar as informações que eu vou botar nessas variáveis pra ver se estão certas. Como eu as testo?
    • Por evandrogoncalves
      Eu preciso que o campo input tenha mais que uma linha, e tenha quebra de linha. Eu estou linkando em um código PHP onde mostrará o conteúdo atual no input e o usuário irá alterar o campo conforme queira, porém quando o texto é longo fica difícil achar o erro por aparecer tudo somente em uma linha. OBS : Tentei usar o TEXTAREA porém não consigo visualizar os dados, só escrever. 
    • Por artur0407
      Boa noite;
       
      Estou realizando testes com a biblioteca PDO para banco de dados com PHP;
      Logo de inicio estou realizando minha conexão com o banco utilizando um código simples nativo da biblioteca.
      No entanto, mesmo errando o código propositalmente e tendo setado todos os possíveis erros e tratando com o bloco "try catch" o php não me retorna erro de nenhuma forma.
       
      Abaixo ambos os códigos;
       
      Primeiro sem erros:
      <?php ini_set('display_errors',true); ini_set('display_startup_erros',1); error_reporting(E_ALL); $username = 'root'; $password = ''; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING, PDO::ATTR_PERSISTENT => true ]; try { $conn = new PDO('mysql:host=localhost; dbname=test', $username, $password, $options); $conn->exec("set names utf8"); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } ?> Posteriormente com erro proposital (na string de conexão da classe PDO)
      <?php ini_set('display_errors',true); ini_set('display_startup_erros',1); error_reporting(E_ALL); $username = 'root'; $password = ''; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING, PDO::ATTR_PERSISTENT => true ]; try { $conn = new PDO('mysql:hst=localhost; dbname=test', $username, $password, $options); $conn->exec("set names utf8"); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } ?> Observem que no construtor do pdo, no lugar de host escrevi 'hst' e o php não retorna erros!
       
      Como sou novo aqui, me desculpem algum erro de formatação na mensagem, obrigado!
    • Por BryanSamuel
      Eu gostaria de importar dados de uma planinha que esteja em .xls para mysql, por exemplo, tem uma página html simples onde o usuário vai enviar a planilha, e com isso eu quero importar para uma base de dados, mas tem um porém, por exemplo, tem uma coluna com o número da matrícula de cada aluno, eu gostaria de fazer uma verificação, para que se já existisse um aluno com a matrícula igual, atualizasse somente determinadas colunas, como por exemplo, a coluna turma e a coluna turno, eu sei que parece pedir demais mas eu sou bem novato em php e mysql, se alguém puder ajudar agradeço desde já, abraço. 
      obs. de preferência, se tiver como importar direto de .xls eu agradeço, mas caso só de com .csv também serve
    • Por sobrinnho
      Olá pessoal, sou novo aqui e preciso da ajuda de vocês, fiz um site no dreamweaver CS6 e preciso conectar ele no BD do meu servidor online, no localhost consigo fazer as conexões, mas na hora de configurar pra o online só aparece erros.

×

Informação importante

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