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

Résolu
cyril.eseo Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
cyril.eseo Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   6
 
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   Statut Membre Dernière intervention   33
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention   3
 
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
rénolipus
 
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