IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requete select imbriqués avec plusieurs références


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    sans
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 8
    Points
    8
    Par défaut Requete select imbriqués avec plusieurs références
    Salut à tous, :o

    voilà je n'arrive pas trouver soluce à ce problème. Voici un exemple et pis après je complique:

    SELECT * from ma_table where clé_primaire IN (select clé_primaire, max(date) from ma_table group by clé_primaire);

    Vous voyez ce que çà devrait faire... Retourner l'enregistrement d'un objet correspondant à son dernier archivage. Par exemple, retrouver la dernière mesure effectuée par un capteur.
    "Ben qu'il est couillon celui-là, il a sa soluce" se diront certains. Sauf que dans la réalité ma clé primaire est forcément composée: Un enregistrement d'une mesure est caractérisé avant tout par l'identifiant du capteur ET la date à laquelle cette mesure à été faite.
    Donc je reexplique avec un schéma:

    TABLE_mesure
    ==========
    NOM_capteur
    DATE_mesure
    VALEUR

    et donc NOM et DATE forment la clé primaire et DONC
    pour retrouver le dernier enregistrement de chaque capteur:
    select nom_capteur, max(date_mesure) from ma_table group by nom_capteur
    c'est bien mais je peux pas obtenir la valeur de la mesure.
    (Logique puisque c'est un group). Et donc par dessus ca je dois faire un select de *, problème mon lien est sur 2 colonnes:

    SELECT * from mesures where nom et date IN (select nom, max(date) from ma_table group by clé_primaire);

    et là la syntaxe en prend un gros coup!!! C'est un truc tellement banal qu'il doit bien exister une achtuche...

    Merci

  2. #2
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    utilises ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * from mesures m1
     where  date = (select  max(date) from mesures m2 
                            Where m1.nom =m2.nom );
    A+

  3. #3
    Futur Membre du Club
    Profil pro
    sans
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 8
    Points
    8
    Par défaut
    Merci, :o j'avais pas vu la chose comme çà. Pourtant je connaissais la technique. Toutefois, la soluce me plait pas trop car je risque d'atteindre rapidement les 10 millions d'enregistrements . J'ai lu je sais plus où que cette technique implique la rééxécution du SELECT interne à pour chaque résultat du SELECT externe à cause du lien entre m1 et m2 dans la requete interne.

    Rassure-toi, tu m'as quand même bien aidé, car j'utiliserai cette solution sur des tables plus petites, et à défaut d'une meilleure sur les grosses tables.

    Peut-être connais-tu le PL/SQL d'ORACLE, je pourrais faire des requetes séparées et concaténer les résultats, (si c'es possible???) dans une procédure stockée.

    Merci encore.

  4. #4
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    tu peux faire autrement en concatenant la date, converti en text sous le format 'yyyy-mm-dd', et le champ nom


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    SELECT * from ma_table 
    where date_converti+nom IN (select max(date_converti)+nom  from ma_table group by nom)
    A+

  5. #5
    Futur Membre du Club
    Profil pro
    sans
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 8
    Points
    8
    Par défaut
    Bien, c'est parfait.

    Et encore Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete select count(*) avec having max()
    Par Goupo dans le forum Langage SQL
    Réponses: 10
    Dernier message: 09/03/2009, 12h50
  2. Requete selection qui mouline plusieurs minutes
    Par Bernard67 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 19/10/2008, 14h04
  3. Select imbriqué avec plusieurs colonne
    Par rad_hass dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2008, 10h48
  4. Requete select : jointure avec champs null
    Par Tidus159 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 06/06/2008, 13h31
  5. Requete assez compliqué avec plusieur resultat
    Par castelligreg dans le forum Access
    Réponses: 3
    Dernier message: 18/04/2006, 22h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo