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 :

Récupération dernière date [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Account Manager
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Account Manager
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 62
    Points
    62
    Par défaut Récupération dernière date
    Bonjour,

    J'ai une table dans laquelle j'aimerais établir une requête qui reprend uniquement l'enregistrement correspondant à la dernière date par IDContrat.


    IDContrat | TypeTransaction | DateTransaction
    2537831 | Type 01 | 04/12/2013
    2537831 | Type 02 | 30/04/2013
    2537831 | Type 02 | 30/06/2015
    2537831 | Type 02 | 06/04/2010
    2537831 | Type 03 | 30/10/2007
    2537831 | Type 03 | 21/03/2006
    2537832 | Type 01 | 21/11/2014
    2537832 | Type 02 | 12/07/2014

    Le résultat sera donc le suivant
    2537831 | Type 02 | 30/06/2015
    2537832 | Type 01 | 21/11/2014

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Plusieurs possibilités, la plus simple est de chercher la ligne pour laquelle il n'existe aucune ligne du même contrat dont la date est plus grande
    La deuxième consiste à vérifier que la date de la ligne est la date maximale pour le contrat

    Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT IDContrat
          ,TypeTransaction
          ,DateTransaction
    FROM  Ma_Table AS MAIN                       
    WHERE NOT EXISTS                                 
         (SELECT 1 
          FROM Ma_Table AS SUBQ                 
          WHERE SUBQ.IDContrat       = MAIN.IDContrat
            AND SUBQ.TypeTransaction = MAIN.TypeTransaction                 
            AND SUBQ.DateTransaction > MAIN.DateTransaction)
    Ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT IDContrat
          ,TypeTransaction
          ,DateTransaction
    FROM  Ma_Table AS MAIN
    WHERE DateTransaction =                         
         (SELECT MAX(DateTransaction) 
          FROM Ma_Table AS SUBQ       
          WHERE SUBQ.IDContrat       = MAIN.IDContrat
            AND SUBQ.TypeTransaction = MAIN.TypeTransaction)
    La première solution est plus performante

  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 aussi utiliser une fonction fenêtrée pour cela :

    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
     
    WITH CTE AS (
        SELECT 
            IDContrat
          , TypeTransaction
          , DateTransaction
          , ROW_NUMBER() OVER(PARTITION BY IDContrat ORDER BY DateTransaction  DESC) AS RN
        FROM LaTable
    )
    SELECT 
            IDContrat
          , TypeTransaction
          , DateTransaction
    FROM CTE
    WHERE RN = 1

  4. #4
    Membre du Club
    Homme Profil pro
    Account Manager
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Account Manager
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 62
    Points
    62
    Par défaut
    Merci à vous deux pour vos réponses

    @escartefigue : les deux solutions me renvoient plusieurs types de transactions par contrat.

    IDContrat Type Date
    2537831 4 2013-04-30 00:00:00.000
    2537831 3 2005-08-09 00:00:00.000
    2537831 11 2005-05-24 00:00:00.000
    2537831 2 2014-12-04 00:00:00.000
    2537832 11 2007-07-06 00:00:00.000
    2537832 2 2014-11-21 00:00:00.000
    2537832 3 2007-07-12 00:00:00.000

    @aieeeuuuuu : la requête fonctionne parfaitement.

    Merci beaucoup pour votre intervention et votre temps

  5. #5
    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
    Citation Envoyé par Stifoun Voir le message

    @escartefigue : les deux solutions me renvoient plusieurs types de transactions par contrat.
    Il suffit de retirer le test d'égalité sur le type de contrat dans les sous requêtes...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/11/2010, 14h18
  2. Réponses: 9
    Dernier message: 16/03/2006, 16h39
  3. [SQL] Récupération de date
    Par t-die dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 19/01/2006, 21h27
  4. récupération des dates d'un fichier
    Par Bleuarff dans le forum Langage
    Réponses: 6
    Dernier message: 22/11/2005, 01h50
  5. [ORACLE]20 dernières dates de facturation
    Par Frank dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/10/2005, 10h06

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