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 SQL et Selection


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Points : 126
    Points
    126
    Par défaut Requete SQL et Selection
    Bonjour,

    J'ai besoin d'un coup de main sur une requete SQL

    Voici la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Idtarif,IDVERSION,Marque,Version,TarifTTC,Datetarif FROM Table_tarif
    where marque ='PIAGGIO'
    and modele= 'PORTER'
    Order by IDTARIF DESC
    Dans mon Table_Tarif j ai la liste des Piaggo Porter à differentes dates.
    Il y a plusieurs version de Piaggo porter
    Exemple de la base

    Ici j ai 2 tarifs par versions , mais je peut en avoir bcp plus

    96358002 96358 PIAGGIO BENNE 12817,53 2006-09-01
    96358001 96358 PIAGGIO BENNE 12566,37 2005-03-15
    96357002 96357 PIAGGIO GLASS 23882,33 2006-09-01
    96357001 96357 PIAGGIO GLASS 23414,09 2005-03-15
    96355002 96355 PIAGGIO PICK UP 11686,71 2006-09-01
    96355001 96355 PIAGGIO PICK UP 11346,45 2005-03-15


    Le but est de recupérer le tarif el plus recent par version .

    J'ai bioen essay par le group by , mais par defaut il me prend l'enregistrement le plus vieux :s

    Comment faire ?

    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Idtarif,IDVERSION,Marque,Version,TarifTTC,Datetarif 
    FROM Table_tarif
    WHERE (Idtarif,IDVERSION,Marque,Version,Datetarif )
    IN  (
        SELECT Idtarif,IDVERSION,Marque,Version,MAX(Datetarif )
        FROM Table_tarif
        WHERE marque ='PIAGGIO'
        AND modele= 'PORTER'
        GROUP BY Idtarif,IDVERSION,Marque,Version
    )
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT Idtarif,IDVERSION,Marque,Version,TarifTTC,Datetarif 
    FROM Table_tarif a 
    WHERE 
    EXISTS (
        SELECT NULL
        FROM 
               (
                   SELECT Idtarif,IDVERSION,Marque,Version,MAX(Datetarif )
                   FROM Table_tarif b
                   WHERE marque ='PIAGGIO'
                   AND modele= 'PORTER'
                   GROUP BY Idtarif,IDVERSION,Marque,Version
              )
        WHERE a.Idtarif=b.Idtarif
        and     a.IDVERSION=b.IDVERSION
        and     a.Marque=b.Marque
        and     a.Version=b.Version
    )

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Points : 126
    Points
    126
    Par défaut
    Ok , bon le soucis c'est que j ai tellement d'enregistrements que ma requete est interminable

    Est il possible de faire cette requete sans les criteres de recheres de marque et model afin de recuperer tous les derniers tarifs des modeles (j ai 200 000 enreg ds ma base et en fait 9 000 versions actives)

  4. #4
    Membre habitué
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 119
    Points : 126
    Points
    126
    Par défaut
    En fait l'idéal sera de creer une 2 eme table avec juste les Resultats de la requete précedente.

    Je connait le mode de fonctionnement "logique" mais je ne sais pas le traduire en SQL

    Etape 1

    Je recupere tous les IDVersion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT distinct IDVERSION
    FROM Table_tarif
    Where datefincom='00000000'
    il y a environ 9000 resultats



    Etape 2

    A partir du resultat de ma requete precedente je fait ce style de requete

    Pour chaque enregistrement je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Idtarif,IDVERSION,Marque,Version,TarifTTC,Datetarif FROM Table_tarif
    WHERE IDVERSION=marequeteprecedente
    ORDER BY DateTarif DESC
    Ici je peux avoir plusieurs resultat mais c est uniquement le premier enregistrement qui m'interesse car c est le plus recent

    L'ideal serait de copier l'enreg dans une nouvelle table de structure identique

    Ensuite je boucle sur mes enreg suivant ...


    Ainsi a la fin j ai une nouvelle table de 9000 enreg au lieu de 200 000 que je n'ai qu'a lire afin d'avoir les bonnes données.


    Est ce possible de faire cela en SQL ?

    (La base est sous mysql)

  5. #5
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Citation Envoyé par rippoz Voir le message
    Ok , bon le soucis c'est que j ai tellement d'enregistrements que ma requete est interminable
    [..](j ai 200 000 enreg ds ma base et en fait 9 000 versions actives)
    200 000 enregistrements c'est conséquent mais tout à fait acceptable si c'est bien indexé.

    Citation Envoyé par rippoz Voir le message
    Ensuite je boucle sur mes enreg suivant ...
    Tu Boucles ? j'espère que tu ne parles pas de curseurs (existe pas en Mysql en tout cas les anciennes versions), ni de boucle php ? Car c'est énormément plus long qu'une requête SQL.

    Citation Envoyé par rippoz Voir le message
    (La base est sous mysql)
    Quelle version ? Les versions inférieures à la version 4.01 ont pas mal de limitations.

    Sinon t'as essayé ma requête avec un index sur (Idtarif,IDVERSION,Marque,Version,datetarif) ?

    D'ailleurs j'ai fait une erreur dans ma requête avec EXISTS. J'ai oublié datetarif en critère et mon alias b n'était pas correctement placé.
    Là voici corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    SELECT Idtarif,IDVERSION,Marque,Version,TarifTTC,Datetarif 
    FROM Table_tarif a 
    WHERE 
    EXISTS (
        SELECT NULL
        FROM 
               (
                   SELECT Idtarif,IDVERSION,Marque,Version,MAX(Datetarif )Max_Datetarif
                   FROM Table_tarif 
                   WHERE marque ='PIAGGIO'
                   AND modele= 'PORTER'
                   GROUP BY Idtarif,IDVERSION,Marque,Version
              ) b
        WHERE b.Idtarif=a.Idtarif
        AND     b.IDVERSION=a.IDVERSION
        AND     b.Marque=a.Marque
        AND     b.Version=a.Version
        AND     b.Version=a.Version
        AND     b.Max_Datetarif=a.Datetarif
    )

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

Discussions similaires

  1. Probleme Requete SQL SELECT
    Par paulo6907 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/10/2006, 11h07
  2. [SQL] <Select> + Requete Sql
    Par samus535 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/06/2006, 19h42
  3. List Select et requete SQL
    Par vincedjs dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 24/02/2006, 20h00
  4. [POSTGRESQL] Requete SQL SELECT
    Par angusyoung34 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/02/2006, 09h30
  5. resultat requete SQL d'un select dans variable vb
    Par seb_06 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 11/10/2004, 16h29

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