[SQL] Problème avec une sous requête

Résolu/Fermé
cyril.eseo Messages postés 19 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 15 octobre 2007 - 13 août 2007 à 08:41
cyril.eseo Messages postés 19 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 15 octobre 2007 - 13 août 2007 à 13:12
Bonjour à tous,

J'ai quelques lacunes en SQL et n'arrive pas à resoudre mon problème. Voila, j'ai qu'une table qui s'apelle "ma_table" avec 4 champs : id,long,lat,date. Tès simple donc.

Je veux retourner pour chaque id (identifiant), tous les informations le concernant (select*) à la date la plus recente. Donc une ligne pour chaque id.

pour ça j'ai la sous requete qui ne marche pas car elle possède plus dans un champ dans la sous requete :
SELECT *
FROM ma_table
WHERE id and date in(
SELECT  id,Max(date) 
FROM ma_table
GROUP BY id);


La solution provisoir consite à faire :
SELECT *
FROM ma_table
WHERE date in(
SELECT  Max(date) 
FROM ma_table
GROUP BY id);


Mais bon, si un autre id, à la même date, ça ne fonctionne pas.

Je ne voit pas comment faire du tout.
Donc si quelqu'un à une petite idée ?
Merci

5 réponses

Rastafman Messages postés 13 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 27 septembre 2007 6
13 août 2007 à 12:30
Bonjour,

Pourquoi tu ferais pas du genre :

SELECT t1.* FROM MaTable t1 WHERE t1.date = (SELECT max(t2.Date) FROM MaTable t2 WHERE t2.ID = T1.ID)

ça devrait fonctionner.
3
JoloKossovar Messages postés 111 Date d'inscription mercredi 1 août 2007 Statut Membre Dernière intervention 5 septembre 2007 33
13 août 2007 à 09:53
Salut ^^
Pourquoi ne fais tu pas cela :

Select * from maTable where id = 'id' and date in(SELECT Max(date) FROM ma_table GROUP BY id); ?
0
cyril.eseo Messages postés 19 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 15 octobre 2007 3
13 août 2007 à 10:05
rénolipus :

Le goupe by ne marche pas. J'ai une erreur avec la fonction agregat. Je crois que parce que long ne fais pas partie du group by.


JoloKossovar:

C'est vrais c'est pas mal ça, mais comment faire pour avoir tous les id ?
Parce que je veux connaitre les informations à la date la plus recente de chaque id.
De ce fait, je n'ai pas d'id particulier.

Merci pour vos reponses.
0
cyril.eseo Messages postés 19 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 15 octobre 2007 3
13 août 2007 à 13:12
Merci beaucoup Rastafman, c'est exactement ça.
Pour être franc je n'y aurais pas pensé.
Vive SQL et longue vie à ce forum.

solution :

SELECT t1.* FROM MaTable t1 WHERE t1.date = (SELECT max(t2.Date) FROM MaTable t2 WHERE t2.ID = T1.ID)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut,

En rajoutant un group by sur l'id et la date, ça n'irait pas ?

SELECT id, long, lat, date
FROM ma_table 
WHERE date IN(
SELECT  MAX(date) 
FROM ma_table
GROUP BY id)
GROUP BY id, date;
-1