Version complète: sur le forum Webmaster Hub : Obtenir l'enregistrement le plus récent par membre
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
steph13
Bonsoir le hub,

Je m'arrache les cheveux sur une requête en ce moment:

La table :
Id / login / date

Avec par exemple :

1/ tata / 2006-05-12
2/ toto / 2006-06-12
3/ tata / 2006-04-12
4/ toto / 2006-03-9

Je veux que ma requête me sorte l'enregistrement le plus recent par login (champs date).

J'ai testé avec

CODE
$sql='select distinct login,date,id from table group by login order by date desc';


Mais cela ne me sort pas l'enregistrement le plus recent.
J'ai testé avec un order by id, même punition.
J'ai aussi tenté sans la clause distinct, idem.
En résumé, je coince.

Merci de votre aide.

++
Stef'
Compte supprimé
Salut steph13, essaie un truc du genre

CODE
SELECT t1.id, max(t1.date) as date, t2.login
FROM table t1, table t2
WHERE t1.login=t2.login
GROUP BY t2.login
Bourinho
Salut, pourquoi faire deux appels à la table "table"???

CODE
SELECT table.login AS login,
max(table.date) as date
FROM table
GROUP BY login


PS : Surtout que je pense que ta requete va poser un probleme Jeroen... car tu n'as pas de calculs d'agrégation sur t1.id...
"De plus, outres les colonnes représentées hors des calculs d'agrégation doivent figurer dans la clause GROUP BY." lu sur ce lien... Je crois que c'est le probleme qui se posait sur la requete initiale de steph13... Sans ce "calcul d'agrégation", SQL ne sait pas quelle valeur choisir!!!

Si tu veux aussi l'id, t'as le choix, soit
CODE
SELECT table.login AS login,
max(table.id) as id,
max(table.date) as date
FROM table
GROUP BY login

OU
CODE
SELECT table.login AS login,
table.id as id
max(table.date) as date
FROM table
GROUP BY login, id

mais je pense que la premiere solution est plus rapide...(mais je ne suis pas sur...)

A+
MarvinLeRouge
Salut,

A mon avis, si on fait un group avec id, ça ne sert à rien : on aura forcément tous les résultats, puisque les ids sont différents.
Peut-être du côté de "having" : un truc du genre
CODE
group by login
having ladate = max(ladate)
*gratgrat*
Bourinho
Je suis d'accord avec toi Marvinlerouge, le groupe by id ne sert à rien...sauf à avoir une syntaxe correcte!!! Car si l'on omet le id à la fin, la requete ne fonctionnera pas car dans la requete en question, il n'y a pas de "calcul d'agregation" sur id...

A+
steph13
Salut à tous,

En premier lieu, merci de vous être penché sur ce cas.
Je viens de tester la seconde requête proposé par Bourinho, et cela fonctionne nickel biggrin.gif

Merci encore !!
Bourinho
Voilà qui me rassure!!! Normalement, elles doivent toutes fonctionner!!! Enfin j'espère!!! wink.gif
MarvinLeRouge
CITATION(Bourinho @ mercredi 14 juin 2006, 11h09) *
Je suis d'accord avec toi Marvinlerouge, le groupe by id ne sert à rien...sauf à avoir une syntaxe correcte!!! Car si l'on omet le id à la fin, la requete ne fonctionnera pas car dans la requete en question, il n'y a pas de "calcul d'agregation" sur id...

A+


Ah vi d'accord je m'ai trompu. Bon ben auto shutup.gif
Bourinho
Salut, ca fait un mois que je m'attaque de front aux requetes SQL... donc je commence a comprendre ce qu'il l'ennuie quand une requete ne fonctionne pas!!! Mais je ne te cache pas que des fois, une malheureuse virgule me pourrit une heure... wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.