sql >> Databáze >  >> RDS >> Mysql

Pomocí ORDER BY a GROUP BY společně

Jeden způsob, jak toho dosáhnout, který správně používá group by :

select l.* 
from table l
inner join (
  select 
    m_id, max(timestamp) as latest 
  from table 
  group by m_id
) r
  on l.timestamp = r.latest and l.m_id = r.m_id
order by timestamp desc

Jak to funguje:

  • vybere nejnovější časové razítko pro každé odlišné m_id v dílčím dotazu
  • vybere pouze řádky z table které odpovídají řádku z poddotazu (tato operace – kde se provede spojení, ale nejsou vybrány žádné sloupce z druhé tabulky, používá se pouze jako filtr – je známá jako "semijoin" pro případ, že by vás to zajímalo)
  • uspořádá řádky


  1. Jak používat role, které se změnily v MySQL 8.0

  2. Jak funguje funkce UNHEX() v MySQL

  3. Zobrazení ALL_PROCEDURES nezobrazuje PROCEDURE_NAME

  4. Jak přečíslovat primární index