64 votes

Utiliser ORDER BY et GROUP BY ensemble

Ma table ressemble à ceci (et j'utilise MySQL):

 m_id | v_id | timestamp
------------------------
6    |   1  | 1333635317
34   |   1  | 1333635323
34   |   1  | 1333635336
6    |   1  | 1333635343
6    |   1  | 1333635349

Mon objectif est de prendre chaque m_id une fois et de trier par l'horodatage le plus élevé.

Le résultat doit être :

 m_id | v_id | timestamp
------------------------
6    |   1  | 1333635343
34   |   1  | 1333635336

Et j'ai écrit cette requête :

 SELECT * FROM table GROUP BY m_id ORDER BY timestamp DESC

Mais, les résultats sont :

 m_id | v_id | timestamp
------------------------
34   |   1  | 1333635323
6    |   1  | 1333635317

Je pense que cela cause parce qu'il fait d'abord GROUP_BY puis ORDER les résultats.

Des idées? Merci.

18voto

Mosty Mostacho Points 22803

Si vous ne vous souciez vraiment pas de l'horodatage que vous obtiendrez et que votre v_id est toujours le même pour un m_i vous pouvez procéder comme suit :

 select m_id, v_id, max(timestamp) from table
group by m_id, v_id
order by timestamp desc

Maintenant, si le v_id change pour un m_id vous devez procéder comme suit

 select t1.* from table t1
left join table t2 on t1.m_id = t2.m_id and t1.timestamp < t2.timestamp
where t2.timestamp is null
order by t1.timestamp desc

8voto

abinash sahoo Points 44

Voici la solution la plus simple

 select m_id,v_id,max(timestamp) from table group by m_id;

Regroupez par m_id mais obtenez le maximum d'horodatage pour chaque m_id.

5voto

Ronak59 Points 895

Tu peux essayer ça

  SELECT tbl.* FROM (SELECT * FROM table ORDER BY timestamp DESC) as tbl
 GROUP BY tbl.m_id  

4voto

Go ahead Points 41

SQL>

 SELECT interview.qtrcode QTR, interview.companyname "Company Name", interview.division Division 
FROM interview 
JOIN jobsdev.employer 
    ON (interview.companyname = employer.companyname AND employer.zipcode like '100%')
GROUP BY interview.qtrcode, interview.companyname, interview.division
ORDER BY interview.qtrcode;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X