sql >> Databasteknik >  >> RDS >> Mysql

Returnera data från raderna med det senaste datumet för varje distinkt candidate_id

Du måste group by allt som inte använder en aggregatfunktion:

SELECT candidate_id, message, max(created_unix), jobpost_id, staffuserid 
    FROM messages 
       WHERE employer_id='$employerid' AND last='company' 
          GROUP BY candidate_id, message, jobpost_id, staffuserid 

Om ditt message är olika per rad och du vill group by candidate_id , då får du inte använda message . I så fall tar du helt enkelt bort den från din valda lista och du behöver den inte i din group by lista. Detsamma gäller för alla andra fält som du inte använder.

Kom ihåg att när du använder aggregatfunktioner måste du innehålla varje fält i antingen en aggregatfunktion eller group by . Annars kommer SQL inte att veta från vilken rad data ska hämtas för den returnerade raden.

Uppdatering:

När du har sett vad du letar efter kommer detta att göra susen:

SELECT candidate_id, message, max(created_unix), jobpost_id, staffuserid 
    FROM messages 
       WHERE employer_id='$employerid' AND last='company' AND
       created_unix = (
           SELECT max(subm.created_unix)
           FROM messages subm
           WHERE subm.candidate_id = messages.candidate_id
       )


  1. returnera värde vid en position från STRING_SPLIT i SQL Server 2016

  2. I Oracle, är det möjligt att INFOGA eller UPPDATERA en post genom en vy?

  3. Hur kontrollerar jag om en begränsning finns i SQL-servern?

  4. PostgreSQL-fråga för att räkna/gruppera efter dag och visa dagar utan data