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 :

Selection aléatoire de X données


Sujet :

Langage SQL

  1. #1
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut Selection aléatoire de X données
    Bonjour à tous,

    je viens a vous car je ne parviens pas a creer une requete avec laquelle je puisse extraire de facon aléatoire X données d'une meme table sous MSSQL.

    J'ai bien essayé quelque chose avec la fonction rand, mais je n'obtiens pas ce que je veux, et je ne sais pas comment determiner le nombre de données a extraire.

    D'avance merci

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    mets un id sur tes lignes

    tire aléatoirement dans le langage que tu veux avec l'algo que tu veux

    selectionne les lignes tirées avec les id sortis aléatoirement.

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut
    Merci pour ta réponse,

    mais j'avoue ne pas avoir tout compris...

    Je pensais pouvoir m'en sortir avec une requete de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET Rowcount 10 SELECT ID FROM MATABLE ORDER BY rand() set rowcount(0)
    mais ca ne fonctionne pas.
    Le but de cette requete est de m'eviter d'avoir ce traitement a faire dans mon code.

    MERCI

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut
    OK, viens de comprendre pourquoi RAND() me retourne 0.4521456987...
    RAND() revoie une valeur entre 0 et 1 ...

    Donc Mathusalem tu as raison, je vais devoir faire ca dans le code

    si jamais vous avez des idées je suis preneur

  5. #5
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    set rowcount va te renvoyer seulement les 10 premières lignes retournées par le select.

    comme en théorie le SGBD ne gère pas l'ordre des lignes dans la table, c'est en effet aléatoire.
    mais en réalité, ce n'est pas si aléatoire que ça et tu risques de ressortir souvent les mêmes lignes


    en googlisant j'ai trouvé la solution à ton soucis :
    http://www.titov.net/2005/09/21/do-n...ws-from-table/

    j'espère juste que tu comprends l'anglais

  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 902
    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 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    Avec MS SQL Server SEULEMENT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP(n) *, NEWID() AS RAND_DATA
    FROM...
    ORDER BY RAND_DATA
    Plus simple encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP(n) *
    FROM ...
    ORDER BY NEWID()
    A +

  7. #7
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut
    Citation Envoyé par SQLpro
    Avec MS SQL Server SEULEMENT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP(n) *, NEWID() AS RAND_DATA
    FROM...
    ORDER BY RAND_DATA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP(n) *
    FROM ...
    ORDER BY NEWID()
    Merci beaucoup pour ces requetes, ca marche du feu de dieu.
    Par contre, je ne suis pas tres calé en SQL et je ne comprend pas comment fonctionne cette requete.
    Pourrais tu stp me la decortiquer parce que je nage un peu?

    merci

    Mathusalem:

    Merci pour cette page, la solution fonctionne aussi, mais en passant par cette requete j'ai la possibilité de zapper un traitement dans le code, et comme ma base n'aura pas un grand nombre de données, je ne lamine pas les ressources

    merci quand meme pour cette solution

  8. #8
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 106
    Points
    3 106
    Par défaut
    Une question me vient à l'utilisation de cette requete:
    Est-il possible d'ajouter a cette requete une clause quelconque qui me permette d'assurer que le même ID ne sortira pas deux fois lors d'un même extraction?

    MERCI d'avance

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

Discussions similaires

  1. [SQL SERVER] Selection aléatoire
    Par diaboloche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/02/2007, 08h34
  2. selection aléatoir d'un gd nombre de lignes
    Par peppena dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 31/10/2006, 16h05
  3. [MySQL] selection aléatoire
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/04/2006, 04h19
  4. Selection aléatoire avec rand
    Par Ruddy16 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/12/2005, 10h01
  5. Selection aléatoire dans une fouchette de 10%
    Par RobertDeNiroZ dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2004, 09h22

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