Page 1 sur 1

JOINTURE, LIMITATION...

Posté : 25 mai 2008, 09:56
par zola2
Bonjour :D

Voila en gros j'ai 1 table "actions" qui contient les champs suivants :

- id (int, autoincrement)
- personne (int)
- date (datetime)
- action (int)

Cette table permet de stocker différents actions sur des personnes.

Je veux récupérer uniquement la dernière action de chaque personne...

Pour l'instant... je dois passer à côté de quelque chose... mais ca ne marche pas :cry:

Posté : 25 mai 2008, 10:02
par d0m
salut,

tu passes déjà à coté du code...
tu pourrais nous donner ce que tu as déjà fait?

Sinon au lieu de tater tout de suite, prends le temps d'écrire simplement en français ce que tu veux :

"je veux selectionner l'action
pour chaque personne
dont la date est la plus grande"


c'est à dire qu'il faut grouper toutes les actions par personne et chercher dans chaque groupe l'action avec la date la plus élevée.

Et justement pour cela il y a une clause sql : GROUP BY
Tu devrais chercher de ce coté

Posté : 25 mai 2008, 10:11
par zola2
C'est quand même un peu plus compliqué qu'un GROUP BY !

Voici la requête nécessaire :

Code : Tout sélectionner

SELECT id, personne, date FROM actions AS A WHERE date IN (SELECT MAX(date) FROM actions AS B WHERE A.personne=B.personne) GROUP BY personne
Le petit "WHERE A.personne=B.personne" est assez important ;)

Posté : 25 mai 2008, 12:03
par Cyrano
J'ai pas testé, mais à mon avis tu pourrais simplifier comme ceci :

Code : Tout sélectionner

SELECT id, personne, MAX(date) AS date FROM actions AS A GROUP BY personne
Sans garantie, mais à priori je vois pas pourquoi ça marcherait pas aussi bien :-k