sql >> Databasteknik >  >> RDS >> Mysql

Mysql Gruppera data efter tid

Om du grupperar efter en (eller flera) kolumner måste du göra något med alla icke-grupperade kolumner för att din fråga ska vara meningsfull.

Du måste säga vad du vill göra med alla grupperade värden. Vanligtvis något som SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()

Om du grupperar efter m_from, kommer du inte att kunna sortera efter m_tid, eftersom alla poster för m_from kommer att grupperas tillsammans, och för de icke-grupperade värdena får du ett godtyckligt svar, eftersom du inte gjorde det. ange vad som ska göras med gruppen.

Du vill förmodligen använda en aggregatfunktion, som MAX(m_time) för att få det högsta värdet för m_time, och sedan sortera på det.

Jag skulle föreslå något i stil med.

 SELECT MAX(m_id),m_from, MAX(m_time) as latest FROM messages 
    WHERE m_to='XXX' OR m_from='XXX' 
    GROUP BY m_from 
    ORDER BY latest DESC;


  1. Skillnader mellan INDEX, PRIMÄR, UNIK, FULLTEXT i MySQL?

  2. Hur man hittar när MySQL/MariaDB-servern startades

  3. PostgreSQL 9.0 Säkerhetskopiering och återställning

  4. Ändra separator för WM_CONCAT-funktionen för Oracle 11gR2