sql >> Database >  >> RDS >> Mysql

Mysql-groepsgegevens op tijd

Als u groepeert op één (of meer) kolommen, moet u iets doen aan alle niet-gegroepeerde kolommen om uw zoekopdracht zinvol te maken.

Je moet zeggen wat je wilt doen met alle gegroepeerde waarden. Meestal zoiets als SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()

Als u groepeert op m_from, kunt u niet sorteren op m_time, omdat alle records voor m_from worden gegroepeerd, en voor de niet-gegroepeerde waarden krijgt u een willekeurig antwoord, omdat u dat niet hebt gedaan specificeren wat te doen met de groep.

U wilt waarschijnlijk een aggregatiefunctie gebruiken, zoals MAX(m_time) om de hoogste waarde voor m_time te krijgen, en daarop sorteren.

Ik zou zoiets voorstellen.

 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. Nieuwe records sinds laatste zoekopdracht in MySQL View

  2. Optimalisatiefasen en gemiste kansen

  3. Toegang tot docker-container mysql-databases

  4. Dynamische MySQL-databaseverbinding voor Entity Framework 6