Jump to content
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?

Share this post


Link to post
Share on other 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
) 

 

Share this post


Link to post
Share on other 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...

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By asacap1000
      Galera já verifiquei vários páginas do google mas não encontrei o que precisava. Temos um sistema a qual no final temos a opção d imprimir os dados. que até aí está perfeito utilizo bootstrap para o layout e está ok. Porém preciso colocar a opção de pdf também aí não sai de jeito nenhum com o bootstrap. preciso gerar algo neste formato.
       

       
      Se alguem puder me dar um norte referente a isso agradeço demais.
    • By gersonab
      bom dia.
      estou com um problema aqui, quando vou fazer update de uma página com dados vindos do banco os select option mostra os dados corretamente porém os value capturados não estão corretos, um exemplo, se for de cidades vem no value somente o primeiro nome da cidade enquanto na exibição do nome vem completo, logo, quando faço o update grava somente o primeiro nome, pois esta se dividindo e criando campos.
      <select class="form-control" name="cidade"> <option value="">-- Selecionar --</option> <?php $curc4 = $pdo->query("SELECT * FROM comarca ORDER BY comarc asc"); while ($lic4 = $curc4->fetch(PDO::FETCH_ASSOC)) { echo "<option value=".$lic4['comarc']." ".($cidade == $lic4['comarc'] ? "selected":"")." >".$lic4['comarc']."</option>"; } ?> </select> como é mostrado no console:
      <option value="ANGRA" dos="" reis="">ANGRA DOS REIS</option> desde já agradeço ajuda
    • By Rodrigo5468
      Olá a todos(as), boa tarde!
       
      Tenho uma Query e um pequeno código em PHP para mostrar os resultados em uma tabela, mas estão repetindo os resultados da Query. Gostaria de uma solução, ou uma gambiarra para isso.
      Query
      SELECT DISTINCT b.ID AS "ID", b.Character AS "Personagem", b.Money AS "DinMao", b.BankMoney AS "DinBanco", b.Savings2 AS "DinPoupa", c.houseOwner AS "IDono", SUM(c.houseMoney) AS "DinCasa" FROM characters b INNER JOIN houses c ON (b.ID = c.houseOwner) ORDER BY ((b.Money+b.BankMoney+b.Savings2+c.houseMoney)) DESC LIMIT 0, 1000 PHP
      if(mysqli_num_rows($q) > 0) { while($r = $q->fetch_assoc()) { //Código da Tabela } }  
      Observação:
      Quando eu removo a seguinte parte da minha Query que é: SUM(c.houseMoney) AS "DinCasa" e deixo assim: c.houseMoney AS "DinCasa"
      Os dados da minha tabela repetem, não sei o motivo e/ou a circunstância disso. Mas peço a ajuda de vocês para solucionar. Vale ressaltar que (ID e houseOwner) tem os mesmos valores, só o valor da casa que recebe o valor do ID, e ele pode ter quantas casa ele quiser, e se ele tiver cinco casas, mostrará o resultado cinco resultados na minha tabela, como posso resolver isso?
       
       
      Meu muito obrigado desde já.
    • By guilhermefdavid
      Olá,
      tenho uma aplicação PHP com algumas funções que não estão funcionando na hospedagem.
      Esta aplicação utiliza apenas conexão com banco de dados -> mysql_connect, mysql_select_db, entre outras de MYSQL.
      Alguma ideia de qual extensão, dentre as existentes na imagem anexa deveria(m) estar ativada(s)?
       
      Um abraço!

    • By Rafaellaranjo
      Estou sofrendo a um tempo com consumo alto de CPU em meu servidor na maioria dos casos em virtude do MYSQL, trabalho com PHP e APACHE e MYSQL. Realizei inúmeras tentativas para acabar com o alto consumo porém todas fracassadas. O evento costuma ocorrer sempre nos mesmos horários, parte da manhã por volta de 9:30/11:00 e parte da tarde entre 14:00/16:00. Meu servidor possui hardware suficiente para suportar, porem acredito que esteja mal configurado. Estou encaminhando alguns processos que observo estar executando em excesso obtidos através do ps aux.
      dovecot/pop3-login
      dovecot/imap-login
      dovecot/lmtp -L
      php-fpm: pool app (o que mais aparece)
      Ps: utilizo um servidor CENTOS 7
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.