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 :

Top 2 des modifications pour un enregistrement


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 85
    Points : 69
    Points
    69
    Par défaut Top 2 des modifications pour un enregistrement
    Bonjour,

    J'ai besoin de vos conseil pour obtenir une requête la plus optimisée possible.

    Je souhaiterai obtenir le TOP 2 des dernières modification sur un enregistrement.

    Ma tables est sous ce format la :

    DATE DE MODIF | USER | LIBELLE DONNEE | DONNEE


    Je souhaiterais donc avoir, pour chaque groupement de user, libelle donnée et donnée, les deux dernières dates de modifications...

    Voici ma requête qui ne semble pas fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT a.TMODIF,a.CENREG,a.CDONNE,a.CUSRMO,CAST(a.CVALEU as nvarchar(100)) as DONNEE
    FROM TABLE  a join TABLE b on a.cdonne = b.cdonne
    WHERE a.TMODIF in (
    	SELECT TOP 2 (a.TMODIF) 
    	FROM TABLE a join TABLE b on a.cdonne = b.cdonne 
    	ORDER BY  a.TMODIF,a.CENREG,a.CDONNE,a.CUSRMO,CAST(a.CVALEU as nvarchar(100)) DESC
    )
    GROUP BY a.TMODIF,a.CENREG,a.CDONNE,a.CUSRMO,CAST(a.CVALEU as nvarchar(100))
    Merci de votre aide !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,


    Je suppose que c'est la colonne DONNEE qui est visée par les modifications en question, il ne faut donc pas regrouper dessus, sinon on aura une ligne par modification.

    Je n'ai pas retrouvé l'équivalence entre la table que vous décrivez et la requete que vous postez (dans laquelle il y a deux tables), mais sur le principe, vous pouvez faire quelque chose comme ceci :

    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
    16
    17
     
    WITH CTE AS (
        SELECT 
                DATE_DE_MODIF 
            ,   USER 
            ,   LIBELLE_DONNEE 
            ,   DONNEE
            ,   ROW_NUMBER() OVER(PARTITION BY USER, LIBELLE_DONNEE ORDER BY DATE_DE_MODIF DESC) AS RN
        FROM LaTable
    )
    SELECT 
            DATE_DE_MODIF 
        ,   USER 
        ,   LIBELLE_DONNEE 
        ,   DONNEE
    FROM CTE
    WHERE RN <= 2

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 85
    Points : 69
    Points
    69
    Par défaut
    Merci beaucoup !!!

    Et si je ne veux que ceux dont la plus récente sont à la date du jour ?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 85
    Points : 69
    Points
    69
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND CTE.TMODIF in (DATEADD(day, -1, GETDATE()));
    Pas sur que ça soit la meilleure des solutions ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut
    Citation Envoyé par amalliap Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND CTE.TMODIF in (DATEADD(day, -1, GETDATE()));
    Pas sur que ça soit la meilleure des solutions ?

    Machinalement j'aurais fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND CAST(CTE.TMODIF as date) = CAST(GETDATE() as date);

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/05/2016, 12h29
  2. Réponses: 6
    Dernier message: 25/04/2013, 09h19
  3. Réponses: 9
    Dernier message: 10/01/2006, 16h27
  4. [HTML] Tableau pour l'enregistrement des données
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 01/11/2005, 15h28
  5. Gestion des modifications pour un enregistrement
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 14h09

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