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

Développement SQL Server Discussion :

Bloquer sur une requête


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut Bloquer sur une requête
    Bonjour,

    Je suis bloquer sur une requête de sélection, je n'ai pas trouvé de solution.

    Dans la BDD j'ai une table USERS dans laquelle nous retrouvons les mots de passe modifiés pour chaque utilisateur. c-a-d chaque utilisateur à un nombre de mot de passe expiré qui est dans cette table.
    Je veux faire une requête qui me sélectionne les 10 derniers mot de passe pour chaque utilisateur et pour XX utilisateurs ordonnés par le champs date de modification.

    J'ai essayé cette requête (SQL-SERVER)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TOP 10
     * FROM USERS
    WHERE USERS IN(USER1, USER2, ..., USERn)
    AND MDP_EXPIRE = 1
    ORDER BY DATE_MODIFICATION
    Sauf que je n'ai pas les 10 mdp de chaque utilisateurs qui est dans la clause IN.

    Merci pour votre aide.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Avec row_number :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select t.*
      from (SELECT *, row_number() over(partition by users order by DATE_MODIFICATION desc) rn
              FROM USERS
             WHERE USERS IN(USER1, USER2, ..., USERn)
               AND MDP_EXPIRE = 1
            ) t
      where t.rn <= 10
      ORDER BY t.users, t.DATE_MODIFICATION

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut row_number n'existe pas sur server-sql 2000
    Bonjour,

    Merci pour cette réponse rapide. Sauf que j'avais pas précisé que je suis sur Server-SQL 2000 et la fonction row_number n'existe pas.

    Merci pour l'aide

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    avec SQL 2000, tu peux faire une procédure stockée dans laquelle tu :
    1) crée une table temporaire avec USER et MDP
    2) un curseur qui parcourt la table utilisateur
    3) à chaque utilisateur trouvé, INSERT du TOP 10 des derniers mdp
    4) SELECT de cette table ...

  5. #5
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 363
    Points
    363
    Par défaut
    Il me semble que Elsuket et SQLPro m'avaient sorti une super requête pour faire cela. Je tâche de la retrouver pour demain !

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    avec SQL 2000, tu peux faire une procédure stockée dans laquelle tu :
    1) crée une table temporaire avec USER et MDP
    2) un curseur qui parcourt la table utilisateur
    3) à chaque utilisateur trouvé, INSERT du TOP 10 des derniers mdp
    4) SELECT de cette table ...
    Cela risque d'être un peu lourd?

    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
     
    SELECT A,B,C,DATE_MODIFICATION 
    FROM(
       SELECT A,B,C,DATE_MODIFICATION ,
          (SELECT COUNT(*) 
           FROM USERS U2
           WHERE U2.IDUSER=U.IDUSER 
                     AND U2.MDP_EXPIRE=1
                     AND U2.DATE_MODIFICATION>U.DATE_MODIFICATION
          ) AS ROWNUMBER
       WHERE USERS IN(USER1, USER2, ..., USERn)
       AND MDP_EXPIRE = 1
       ) AS T
    WHERE T.ROWNUMBER<10
    ORDER BY T.DATE_MODIFICATION DESC

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Points : 4 792
    Points
    4 792
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           FROM USERS U2
           WHERE U2.IDUSER=U.IDUSER
    Je vois bien ton alias U2, mais je n'ai pas trouvé ton alias U

  8. #8
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Mais c'est parce qu'il n'y est pas!

    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
    SELECT A,B,C,DATE_MODIFICATION 
    FROM(
       SELECT A,B,C,DATE_MODIFICATION ,
          (SELECT COUNT(*) 
           FROM USERS U2
           WHERE U2.IDUSER=U.IDUSER 
                     AND U2.MDP_EXPIRE=1
                     AND U2.DATE_MODIFICATION>U.DATE_MODIFICATION
          ) AS ROWNUMBER
    FROM USERS U
       WHERE USERS IN(USER1, USER2, ..., USERn)
       AND MDP_EXPIRE = 1
       ) AS T
    WHERE T.ROWNUMBER<10
    ORDER BY T.DATE_MODIFICATION DESC

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Merci à tous de votre aide.

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

Discussions similaires

  1. Bloquer sur une requête (la somme d'une distance)
    Par badinjala dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/04/2012, 17h02
  2. [Access] Manque d'idées sur une requête
    Par portu dans le forum Langage SQL
    Réponses: 12
    Dernier message: 22/11/2004, 12h25
  3. Pb sur une requête SQL (de champ vide)
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2004, 11h12
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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