Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2011, 17h12   #1
Futur Membre du Club
 
Inscription : août 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 35
Points : 18
Points : 18
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 :
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.
mrabat1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 17h34   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Avec row_number :
Code :
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
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 18h00   #3
Futur Membre du Club
 
Inscription : août 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 35
Points : 18
Points : 18
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
mrabat1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 19h31   #4
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 851
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 : 851
Points : 1 302
Points : 1 302
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 ...
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 20h56   #5
FMJ
Membre du Club
 
Inscription : octobre 2003
Messages : 181
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 181
Points : 61
Points : 61
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 !
FMJ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 08h52   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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 :
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
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 09h09   #7
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 851
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 : 851
Points : 1 302
Points : 1 302
Code :
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
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 09h25   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Mais c'est parce qu'il n'y est pas!

Code :
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
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 23h06   #9
Futur Membre du Club
 
Inscription : août 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 35
Points : 18
Points : 18
Merci à tous de votre aide.
mrabat1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h37.


 
 
 
 
Partenaires

Hébergement Web