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

MS SQL Server Discussion :

Filtre sur enregistrements


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut Filtre sur enregistrements
    Bonjour à tous,
    J'ai une table qui contient une liste d'ordres de fabrication de produits avec des infos classiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NUM_OF | CODE_PRODUIT | NOM_PRODUIT | DATE_FABRICATION....
       125 |      124     |   PRODUIT 1 | 15/04/2008
       235 |      251     |   PRODUIT 2 | 15/04/2009
       268 |      369     |   PRODUIT 3 | 15/03/2008
       365 |      251     |   PRODUIT 2 | 15/02/2008
       451 |      124     |   PRODUIT 1 | 15/04/2005
       598 |      251     |   PRODUIT 2 | 15/10/2008
       684 |      124     |   PRODUIT 1 | 15/12/2006
    ......
    Je souhaite savoir s'il est possible d'effectuer un filtre qui me permettrait de remonter uniquement les 2 derniers enregistrements pour chaque produit,
    de façon à avoir un résultat de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    125 | Produit 1
    684 | Produit 1
    235 | Produit 2
    598 | Produit 2
    268 | Produit 3
    ...
    Merci d'avance pour vos réponses!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 907
    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 907
    Points : 51 656
    Points
    51 656
    Billets dans le blog
    6
    Par défaut
    D'abord il n'existe pas d'enregistrement dans une table, mais des lignes !

    Ensuite c'est assez simple : faite un ROW_NUMBER() ... AS N sur la partition de produit dans l'ordre voulu et en table dérivé, filtres sur N =2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ...
    FROM
    (
    SELECT ... ROW_NUMBER() OVER(PARTITION BY NOM_PRODUIT ORDER BY DATE_FABRICATION)
    FROM ???
    ) AS T
    WHERE N <= 2
    Voir l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/article...clause-window/

    A +

  3. #3
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    Tout d'abord, désolé pour le vocabulaire utilisé, effectivement on parle bien de lignes et non d'enregistrement
    Ensuit, merci pour ces informations et l'article est vraiment complet.
    Seulement j'utilise sqlserver 2000 qui ne connaît pas le fonction ROW_NUMBER().
    Est-ce qu'il existe un équivalent de cette fonction ?
    Merci d'avance pour vos réponses!

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 907
    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 907
    Points : 51 656
    Points
    51 656
    Billets dans le blog
    6
    Par défaut
    Non, mais vous pouvez calculer un tel indice en faisant une sous requête en non équijointure avec un comptage.
    Petit conseil : migrez sur 2008. En effet, le support de 2000 n'existe plus et en sus vous n'avez aucune garantie que les bases SQL Server 2000 pourront être directement reprise dans la future version (2008 R2 ou plus), ce qui vous posera des problèmes pour une migration tardive !

    A +

  5. #5
    Membre habitué Avatar de Mygush
    Inscrit en
    Juin 2007
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 226
    Points : 175
    Points
    175
    Par défaut
    Merci pour tous ces renseignements et pour les conseils.
    Bonne journée.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/03/2014, 13h06
  2. [Toutes versions] PB filtre sur enregistrement
    Par Aladin_23 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/01/2011, 18h03
  3. Réponses: 11
    Dernier message: 18/02/2009, 16h39
  4. Réponses: 7
    Dernier message: 07/06/2007, 10h22
  5. Réponses: 2
    Dernier message: 08/05/2006, 21h08

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