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

SQL Oracle Discussion :

Requête avec rownum


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 50
    Points
    50
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 50
    Points
    50
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/02/2013, 14h23
  2. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20
  3. Requête avec l'expression Like
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 02/09/2003, 09h39
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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