sql >> Database teknologi >  >> RDS >> Mysql

Mysql Grupper data efter tid

Hvis du grupperer efter en (eller flere) kolonner, skal du gøre noget ved alle de ikke-grupperede kolonner, for at din forespørgsel giver mening.

Du skal sige, hvad du vil have gjort med alle de grupperede værdier. Normalt noget som SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()

Hvis du grupperer efter m_from, så vil du ikke være i stand til at sortere efter m_tid, da alle poster for m_from vil blive grupperet sammen, og for de ikke-grupperede værdier vil du få et vilkårligt svar, da du ikke angiv, hvad du skal gøre med gruppen.

Du vil sandsynligvis bruge en aggregeret funktion, såsom MAX(m_time) for at få den højeste værdi for m_time, og derefter sortere på det.

Jeg vil foreslå noget lignende.

 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. PHP SQL-injektionsforebyggelse med strengoperationer

  2. Hent MySQL-data i node.js (express) og udskriv ved hjælp af EJS

  3. MySQL - Få de første 3 kommaseparerede værdier

  4. MySQL en-til-mange joinforbindelse med Group By returnerer kun én observation