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 :

Inner join et selection des 15 premiers résultats qui sastifont à la clause de jointure


Sujet :

Développement SQL Server

  1. #1
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut Inner join et selection des 15 premiers résultats qui sastifont à la clause de jointure
    Bonjour,

    Je vous explique mon problème, qui peut sembler simple, mais pour lequel je n'arrive pas à trouver la syntaxe exacte. Dans une table j'ai plusieurs enregistrements par idUsr avec un champ IsOpen qui peut être à 0 ou à 1. La date d'insertion des ligne est contenue dans le champs Dategen. Ce que je souhaite, c'est créer une requête qui pour pour chaque idusr :
    -on prend les 15 derniers enregistrements
    -et on compte le nombre de IsOpen.

    J'ai essayé cette requête mais elle ne fonctionne pas pourtant tout me semble correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT
    	A.IdUsr,
    	COUNT(*)
    FROM
    	D_ARCHID A
    	INNER JOIN (SELECT TOP(15) * FROM D_ARCHID WHERE IdUsr = A.IdUsr ORDER BY DateGen DESC) B ON B.IdUsr = A.IdUsr
    WHERE B.IsOpen = 1
    GROUP BY A.IdUsr
    J'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg 4104, Level 16, State 1, Line 1
    The multi-part identifier "A.IdUsr" could not be bound
    Pour moi tout me semble correct , la requête dans le INNER JOIN avec le filtre sur l'idusr provenant de la table sur laquelle on fait un group by devrait pour chaque idUsr me renvoyer les 15 derniers résultats (avec le order by dategen DESC)

    J'ai l'impression que ce que je souhaite faire n'est pas possible et que je vais devoir passer par une table tempo . Vous en pensez quoi ?

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Points : 180
    Points
    180
    Par défaut
    Bonjour, ça va dépendre de ta version de SQL Server.
    Si tu es au minimum en 2005, tu peux utiliser les fonctions de partitionnement pour numéroter les lignes par utilisateur/date.

    Combinées avec les "cte" ça peut donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH cte AS (
    	SELECT IdUsr
    		, IsOpen
    		, ROW_NUMBER() OVER(PARTITION BY IdUsr ORDER BY DateGen DESC) AS Num
    	FROM D_ARCHID
    )
    SELECT	
    		IdUsr,
    		COUNT(*)
    FROM cte
    WHERE IsOpen = 1
    AND Num < 16
    GROUP BY IdUsr
    Tu peux également utiliser le code de la cte comme sous requête si tu préfères utiliser les jointures

  3. #3
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    Je suis sous SQL server 2005. Effectivement ça marche nickel et en plus je viens d'apprendre des fonctions transact (je dev des requêtes que très rarement). Je me coucherai moins bête ce soir.

    Encore merci

    Olivier

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

Discussions similaires

  1. SQL INNER JOIN et SELECT
    Par onha94 dans le forum Développement
    Réponses: 8
    Dernier message: 22/01/2015, 17h32
  2. INNER JOIN et SELECT
    Par bokehfr dans le forum Requêtes
    Réponses: 4
    Dernier message: 09/05/2014, 22h08
  3. [Mon premier code SQL] Multiples INNER JOIN's
    Par Paulinho dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/11/2005, 09h04
  4. Selection des x premiers caractères dans un champ précis
    Par Schulman dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/01/2005, 09h23
  5. Inner Join & Select
    Par bakaneko dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/02/2004, 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