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

Restituisce i dati dalle righe con la data più recente di ogni distinto candidate_id

Devi group by tutto ciò che non utilizza una funzione di aggregazione:

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 

Se il tuo message è diverso per riga e vuoi group by candidate_id , allora non devi usare message . In tal caso, rimuovilo semplicemente dall'elenco selezionato e non ti servirà nel tuo group by elenco. Lo stesso vale per qualsiasi altro campo che non stai utilizzando.

Ricorda, quando utilizzi le funzioni di aggregazione, devi contenere ogni campo in una funzione di aggregazione o nel group by . In caso contrario, SQL non saprà da quale riga estrarre i dati per la riga restituita.

Aggiornamento:

Dopo aver visto cosa stai cercando, questo farà il trucco:

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
       )