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 :

[SQL] une requete qui fait mal a la tete


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 19
    Points : 18
    Points
    18
    Par défaut [SQL] une requete qui fait mal a la tete
    Bonjour je cherche a faire une requete et je me triture le cerveau mais j'y arrive pas


    J'ai un stock d'objet de different type (clavier, ecran, souris)
    les objets sont unique (Numero de serie)

    exemple
    Table Stock

    ID TYPE
    01 Souris
    02 Souris
    03 Souris
    04 Souris
    05 Souris
    06 Souris
    07 Ecran
    08 Ecran
    09 Ecran
    10 Ecran
    11 Ecran
    12 Ecran
    13 Ecran
    14 Ecran




    Je cherche la requete (magique ) qui me permetrais de retrouver les x premiers ID par type

    Par exemple si je cherche les 3 Premiers ID par type sur la base décrite ca me donne

    01 Souris
    02 Souris
    03 Souris
    07 Ecran
    08 Ecran
    09 Ecran

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Jete un coup d'oeil la :
    http://mysql.developpez.com/faq/?pag...RUCTIONS_limit
    ca pourra peut etre t'aider

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    merci mais ca me donne pas vraiment le bon résultat

    car les limites s'appliquent a la requete alors que la ca s'appliquent a une sous-zone de la requetes (le type)

  4. #4
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Je sais pas si a peut marcher mais test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM Stock GROUP BY Type LIMIT 3;
    ou peut etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM Stock GROUP BY Type HAVING LIMIT 3;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    Hum

    J'avoue ma faute

    je fais des tests sous Oracle en esperant que ca marche sous PostgreSql a la fin (en utilisant du SQL92)

    Malheureusement la commande LIMIT ne passe pas tres bien ( )

    C'est pas grave

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    pas besoin de LIMIT et toutes ces conneries là ! Il suffit de faire une non équi auto jointure externe avec un filtre de comptage et un group by.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    CREATE TABLE T_STOCK_STK
    (STK_ID   INT NOT NULL PRIMARY KEY,
     STK_TYPE VARCHAR(16) NOT NULL)
     
    INSERT INTO T_STOCK_STK VALUES (1, 'Souris')
    INSERT INTO T_STOCK_STK VALUES (2, 'Souris')
    INSERT INTO T_STOCK_STK VALUES (3, 'Souris')
    INSERT INTO T_STOCK_STK VALUES (4, 'Souris')
    INSERT INTO T_STOCK_STK VALUES (5, 'Souris')
    INSERT INTO T_STOCK_STK VALUES (6, 'Souris')
    INSERT INTO T_STOCK_STK VALUES (7, 'Ecran')
    INSERT INTO T_STOCK_STK VALUES (8, 'Ecran')
    INSERT INTO T_STOCK_STK VALUES (9, 'Ecran')
    INSERT INTO T_STOCK_STK VALUES (10, 'Ecran')
    INSERT INTO T_STOCK_STK VALUES (11, 'Ecran')
    INSERT INTO T_STOCK_STK VALUES (12, 'Ecran')
    INSERT INTO T_STOCK_STK VALUES (13, 'Ecran')
    INSERT INTO T_STOCK_STK VALUES (14, 'Ecran')
     
     
    SELECT ST1.STK_ID, ST1.STK_TYPE
    FROM   T_STOCK_STK ST1
           LEFT OUTER JOIN T_STOCK_STK ST2
                ON ST1.STK_ID > ST2.STK_ID
                   AND ST1.STK_TYPE = ST2.STK_TYPE
    GROUP  BY ST1.STK_ID, ST1.STK_TYPE
    HAVING COUNT(ST2.STK_ID) < 3
     
    STK_ID      STK_TYPE         
    ----------- ---------------- 
    1           Souris
    2           Souris
    3           Souris
    7           Ecran
    8           Ecran
    9           Ecran
    A +

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Solution SQLPro sans jointure externe (il faudrait faire des tests significatifs de performance)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ST1.STK_ID, ST1.STK_TYPE 
    FROM   T_STOCK_STK ST1 
           JOIN T_STOCK_STK ST2 
                ON ST1.STK_ID >= ST2.STK_ID 
                   AND ST1.STK_TYPE = ST2.STK_TYPE 
    GROUP  BY ST1.STK_ID, ST1.STK_TYPE 
    HAVING COUNT(ST2.STK_ID) <= 3

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 19
    Points : 18
    Points
    18
    Par défaut





    merci les gars

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/06/2006, 06h02
  2. Supprimer une crontab qui fait planter le server
    Par osmoze dans le forum Administration système
    Réponses: 5
    Dernier message: 31/03/2006, 15h42
  3. une requete qui fonctionne aux 3/4...
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 22h08
  4. [VB6] recuperer une requete qui renvoie du xml
    Par voyageur dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/12/2004, 10h03

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