MySQL GROUP BY sur le dernier enregistrement

  • Auteur de la discussion Auteur de la discussion KOogar
  • Date de début Date de début
WRInaute accro
Bonjour,

je cherche a faire une requete qui groupe les pays et qui prend l'enregistrement le plus récent

mysql> SELECT pays,product,date
FROM tb
GROUP BY pays
HAVING date = max(date)
;
+---------+------------+-------------+
| pays | product | date |
+---------+------------+-------------+
| Finland | Computer | 2009-04-20 |
| Finland | Phone | 2009-03-10 |
| Suisse | Calculator | 2009-04-20 |
| Suisse | Computer | 2008-02-10 |
| US | Calculator | 2009-04-10 |
+---------+------------+-------------+

Le resultat doit contenir 3 enregistrements:

Finland | Computer | 2009-04-20
Suisse | Calculator | 2009-04-20
US | Calculator | 2009-04-10

La requete plus haut parait bonne mais elle ne fonctionne pas

une idéeee ?
 
WRInaute discret
Bonjour.
Peut etre ?
SELECT pays,product,MAX(date) AS date
FROM tb
GROUP BY pays ORDER BY pays
 
WRInaute passionné
Code:
SELECT pays,product,date
FROM tb
GROUP BY pays
HAVING max(date)

comme ça non plus ?

mouarf

mysql> SELECT pays,product,date
FROM tb
GROUP BY pays
HAVING date IN (SELECT MAX(date) FROM TB GROUP BY pays)
ORDER BY pays

et là ?
 
WRInaute passionné
en fait je pense même qu'il faut enlever le 1er group by

Code:
SELECT pays, product, date
FROM tb
HAVING date IN (SELECT MAX(date) FROM tb GROUP BY pays)
ORDER BY pays

Mais niveau optimisation c'est certainement pas la meilleure solution :oops:
 
WRInaute discret
druart a dit:
en fait je pense même qu'il faut enlever le 1er group by

Code:
SELECT pays, product, date
FROM tb
HAVING date IN (SELECT MAX(date) FROM tb GROUP BY pays)
ORDER BY pays

Mais niveau optimisation c'est certainement pas la meilleure solution :oops:
Celle la je crois est plus légère étant donné qu'il y a aucun GROUP BY, enfin je crois!
Code:
select t1.pays, t1.product, t1.date
from tb t1
where t1.date = (select max(t2.date) from tb t2 where t2.pays=t1.pays)
ORDER BY pays

Le problème c'est qu'il a besoin de product, sinon cette requête aurait suffit.
Code:
SELECT pays, max(date)
FROM tb
GROUP BY pays
 
WRInaute accro
Code:
select t1.pays, t1.product, t1.date
from tb t1
where t1.date = (select max(t2.date) from tb t2 where t2.pays=t1.pays)
ORDER BY pays

j'ai testé chaque requete au fur qu'elles ont été posté et celle ci est la bonne

Merci jamalofski, c'est impeccable
 
Discussions similaires
Haut