Rechercher : dans
Par :

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

Dernière réponse le 13 aoû 2007 à 13:12:54 cyril.eseo, le 13 aoû 2007 à 08:41:34 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 2.0.0.6

Meilleures réponses pour « [SQL] Problème avec une sous requête » dans :
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...
SQL - Jointures VoirExpression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se...

1

JoloKossovar, le 13 aoû 2007 à 09:53:14

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); ?

Répondre à JoloKossovar

2

rénolipus, le 13 aoû 2007 à 09:57:43

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;

Répondre à rénolipus

3

cyril.eseo, le 13 aoû 2007 à 10:05:12

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.

Répondre à cyril.eseo

4

Rastafman, le 13 aoû 2007 à 12:30:27
  • +1

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.

Répondre à Rastafman

5

 cyril.eseo, le 13 aoû 2007 à 13:12:54

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)

Répondre à cyril.eseo
Collection CommentÇaMarche.net