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 modifs en fonction de la date du jour


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 modifs en fonction de la date du jour
    Bonjour,

    Voici un exemple de ma Table :

    DATE | AUTEUR | LIBELLE DONNÉE | VALEUR

    04/09/2017 | TOTO | AGE | 26
    02/09/2017 | TOTO | AGE | 25
    01/09/2017 | TOTO | AGE | 24
    04/09/2017 | PAUL | AGE | 26
    01/01/2017 | PAUL |AGE | 15
    31/09/2016 | PAUL | AGE | 11
    04/09/2017 | DIDIER | AGE | 10

    Et je souhaiterais retourner les lignes modifier aujourd'hui (04/09/2017) avec son enregistrement précédent, exemple :

    DATE | AUTEUR | LIBELLE DONNÉE | VALEUR

    04/09/2017 | TOTO | AGE | 26
    02/09/2017 | TOTO | AGE | 25
    04/09/2017 | PAUL | AGE | 26
    01/01/2017 | PAUL | AGE | 15
    04/09/2017 | DIDIER | AGE | 10

    Voici mon code aujourd'hui qui me retourne simplement les dates modifiés aujourd'hui :

    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
    18
    19
     
    WITH CTE AS (
        SELECT 
    	    a.DATE
            ,   a.AUTEUR
            ,   a.LIBELLE
            ,   a.VALEUR
            ,   ROW_NUMBER() OVER(PARTITION BY a.AUTEUR, a.LIBELLE ORDER BY a.DATE desc) AS RN
            FROM TABLEA a join TABLEB b on a.LIBELLE = b.LIBELLE
    	WHERE CAST(a.DATE AS DATE) in (CAST(GETDATE() AS DATE))
     
    )
    SELECT 
            CTE.DATE
        ,   CTE.AUTEUR
        ,   CTE.LIBELLE
        ,   CTE.VALEUR
    FROM CTE
    WHERE RN <= 2;
    Merci d'avance !

  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 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Il faut que vous ayez une clef composée d'un ID et de la date de MAJ, avec ces deux infos la solution est simple :
    ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DATE_MAJ DESC)

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    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,

    vous pouvez essayez 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
    18
     
    WITH CTE AS (
        SELECT 
    	    a.DATE
            ,   a.AUTEUR
            ,   a.LIBELLE
            ,   a.VALEUR
            ,   LAG(DATE) OVER(PARTITION BY a.AUTEUR, a.LIBELLE ORDER BY a.DATE desc) AS DateSuivant
            FROM TABLEA a join TABLEB b on a.LIBELLE = b.LIBELLE
    )
    SELECT 
            CTE.DATE
        ,   CTE.AUTEUR
        ,   CTE.LIBELLE
        ,   CTE.VALEUR
    FROM CTE
    WHERE CAST(DATE AS DATE) = (CAST(GETDATE() AS DATE))
    	OR	CAST(DateSuivant AS DATE) = (CAST(GETDATE() AS DATE))

Discussions similaires

  1. Top 2 des modifications pour un enregistrement
    Par amalliap dans le forum Développement
    Réponses: 4
    Dernier message: 06/09/2017, 13h15
  2. supprimer des fichiers en fonction de la date de modification
    Par jujudeo dans le forum Général Python
    Réponses: 5
    Dernier message: 03/06/2016, 11h21
  3. [Batch] Supprimer des fichiers en fonction de leur date
    Par charlix dans le forum Scripts/Batch
    Réponses: 55
    Dernier message: 05/10/2015, 17h18
  4. Supprimer des fichiers en fonction de la date sous DOS
    Par charlix dans le forum Windows
    Réponses: 0
    Dernier message: 21/03/2008, 08h18
  5. affichage des saisons en fonction de la date
    Par marlene.ln dans le forum Access
    Réponses: 4
    Dernier message: 26/02/2007, 16h51

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