Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Futur Membre du Club
    Inscrit en
    juin 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations forums :
    Inscription : juin 2009
    Messages : 110
    Points : 19
    Points
    19

    Par défaut Requête avec rownum

    Bonjour,

    J'ai dans ma table des champs qui concernce un même objet mais avec des dates différentes. En faites j'aimerais récupérer la ligne avec la date la plus proche. Je sais que y a déjà des questions comme celle-ci qui ont déjà été posées mais je n'ai pas réussi à faire ma requête avec les différentes réponses que j'ai vu.

    En faite ma requête me renvoi toujours la même date avec cette requête:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT mat.num_parc, type_interne_materiel, nom_marque, serie_materiel, statut_mouvement, prix_achat_materiel, statut_materiel, nom_client, date_debut_mouvement, date_fin_mouvement
    FROM Materiel mat
    INNER JOIN Marque mar
    ON mat.num_marque = mar.num_marque
    LEFT JOIN Mouvement mou
    ON mat.num_parc = mou.num_parc
    LEFT JOIN Client cli
    ON mou.num_client = cli.num_client
    WHERE serie_materiel = 354154
    AND rownum <= 1
    ORDER BY date_debut_mouvement DESC;
    Pour moi je pense que le rownum doit être fait aprés la ORDER BY, donc j'ai essayé avec une sous-requête comme ceci:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT mat.num_parc, type_interne_materiel, nom_marque, serie_materiel, statut_mouvement, prix_achat_materiel, statut_materiel, nom_client, date_debut_mouvement, date_fin_mouvement
    FROM Materiel mat
    INNER JOIN Marque mar
    ON mat.num_marque = mar.num_marque
    LEFT JOIN Mouvement mou
    ON mat.num_parc = mou.num_parc
    LEFT JOIN Client cli
    ON mou.num_client = cli.num_client
    WHERE serie_materiel = 354154
    AND date_debut_mouvement = (SELECT date_debut_mouvement,rownum FROM mouvement WHERE num_parc = 3 AND rownum <= 1 ORDER BY date_debut_mouvement DESC)
    AND rownum <= 1;
    Mais la non plus ça ne fonctionna pas.

    J'ai même testé la requête :
    Code :
    SELECT date_debut_mouvement,rownum FROM mouvement WHERE num_parc = 3 rownum <= 2 ORDER BY date_debut_mouvement DESC
    mais là il ne me ressort rien du tout, alors que la ligne que je veux à bien le rownum 2.

    Auriez vous une idée du souci?

    Par avance merci

  2. #2
    Expert Confirmé
    Inscrit en
    août 2008
    Messages
    2 145
    Détails du profil
    Informations forums :
    Inscription : août 2008
    Messages : 2 145
    Points : 3 744
    Points
    3 744

    Par défaut

    D'abord on tri dans une sous-requête puis on peut utiliser rownum, sinon on récupère une ligne aléatoire.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT * FROM (
    SELECT mat.num_parc, type_interne_materiel, nom_marque, serie_materiel, statut_mouvement, prix_achat_materiel, statut_materiel, nom_client, 
           date_debut_mouvement, date_fin_mouvement
      FROM Materiel mat
     INNER JOIN Marque mar
        ON mat.num_marque = mar.num_marque
      LEFT JOIN Mouvement mou
        ON mat.num_parc = mou.num_parc
      LEFT JOIN Client cli
        ON mou.num_client = cli.num_client
     WHERE serie_materiel = 354154
     ORDER BY date_debut_mouvement DESC
    )
    WHERE rownum = 1;
    mais là il ne me ressort rien du tout, alors que la ligne que je veux à bien le rownum 2.
    Code :
    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM (
    SELECT date_debut_mouvement,rownum AS rn
      FROM mouvement 
     WHERE num_parc = 3 
     ORDER BY date_debut_mouvement DESC
     )
     WHERE rn = 2

  3. #3
    Futur Membre du Club
    Inscrit en
    juin 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations forums :
    Inscription : juin 2009
    Messages : 110
    Points : 19
    Points
    19

    Par défaut

    Je te remercie skuatamad. Je me doutais bien qu'il faille ressortir les résultats avant et aprés utiliser le rownum, mais je ne savais pas comment faire.

    Je n'avais pas vu encore une requête de ce type:
    Code :
    SELECT * FROM (SELECT ...)
    On en apprends tout les jours

    Je te remercie pour ta réponse.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •