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 :

RANDOM() Avec critères


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 49
    Points : 31
    Points
    31
    Par défaut RANDOM() Avec critères
    Bonjour à tous,

    Je suis actuellement un peu bloquée sur une requête. Dans une table où il y a des factures (TAB_FACTURES), j'ai un numéro de vendeur NUM_VENDEUR.

    Pour faire un état statistique, on me demande, pour un mois donné, de prendre deux factures au hasard pour CHAQUE vendeur (dont le numéro est supérieur à 5000).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *
     
    FROM (SELECT * FROM TAB_FACTURES 
    WHERE NUM_VENDEUR >= 5000
    AND TO_CHAR(DATE_FACTURE,'mm/yyyy') = '01/2013'
    ORDER BY dbms_random.VALUE)
     
    WHERE ROWNUM < 3
    Ce code me renvoie bien 2 factures au hasard parmi tous mes vendeurs. Mais j'aimerais sortir 2 pour chacun d'entre eux, je ne vois pas trop comment ce serait possible :/

    Pouvez vous m'aider ?

    Je me dis que ce serait facile en PL/SQL mais je ne pense pas pouvoir l'intégrer dans mon objetDB en java par la suite :/

  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
    Citation Envoyé par Eithne Voir le message
    Mais j'aimerais sortir 2 pour chacun d'entre eux, je ne vois pas trop comment ce serait possible :/
    ROW_NUMBER

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Requête de fenêtrage par vendeur avec tri par dbms_random.value. Comme dans l’exemple suivant qui choisit aléatoirement 2 employee_id (quand y en a) par service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select *
      From (
    Select employee_id, 
           rank() over(partition by department_id order by dbms_random.value)   rn,
           department_id
      From hr.employees
    )
    Where rn < 3

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Attention aussi au filtre sur le mois, TO_CHAR(DATE_FACTURE,'mm/yyyy') = '01/2013' évite l'utilisation d'un éventuel index sur DATE_FACTURE.
    Il vaut mieux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        DATE_FACTURE >= date '2013-01-01'
    AND DATE_FACTURE <  date '2013-02-01'

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 49
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup pour vos réponses !

    ORA-00439: Fonction non activée : OLAP Window Functions
    Je crois que ça peut pas marcher ^^

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous êtes en Oracle 8i ?

  7. #7
    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
    En 8i les fonctions analytiques fonctionnent mais exclusivement en entreprise edition.
    Par contre elles ne sont pas disponnibles nativement dans du PL/SQL, il faut passer par du SQL dynamique.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/01/2012, 17h59
  2. Pb requête avec critères dans projet Access
    Par laville dans le forum Access
    Réponses: 4
    Dernier message: 19/04/2006, 20h09
  3. Comment faire un random avec un min et un max
    Par crocodingo dans le forum C++
    Réponses: 3
    Dernier message: 06/04/2006, 11h19
  4. [DOM] Récupération d'un noeud avec critères ?
    Par elitost dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 20/10/2005, 15h27
  5. [Excel] Selection multiple avec critères
    Par tibotibotibo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/04/2005, 10h48

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