none
Sélectionner une valeur unique et pour chaque valeur lui associer sa valeur la plus recente RRS feed

  • Question


  • Bonjour , 

    J'ai un problème , j'ai essayer différentes méthodes mais sans convenir ( temps d’exécution trop long ou ne retournant pas le bon résultat ) 
    Petit schéma pour mieux voir : 

    +----+----------+-------+
    | ID | COL2     | DATE  | 
    +----+----------+-------+
    |  1 | 1        |  2001 | 
    |  1 | 2        |  2002 | 
    |  1 | 3        |  2003 | 
    |  1 | 4        |  2004 | 
    |  2 | 1        |  2001 | 
    |  2 | 2        |  2002 | 
    |  2 | 3        |  2003 | 
    |  2 | 4        |  2004 | 
    +----+----------+-------+

    j'aimerais avoir en résultat deux lignes avec la date la et la colonne 2 la plus récente :

    +----+----------+-------+
    | ID | COL2     | DATE  | 
    +----+----------+-------+
    |  1 | 4        |  2004 | 
    |  2 | 4        |  2004 | 
    +----+----------+-------+

    mais je ne sais pas comment m'y prendre pour avoir ce résultat .

    Si vous avez des conseils , des pistes ou des idées je vous en serais très reconnaissant :) 

    Merci d'avance 
    Cordialement

    Clément FAYARD
    • Modifié clement_F jeudi 20 novembre 2014 09:00
    jeudi 20 novembre 2014 08:48

Réponses

  • La requête : 

    SELECT t.*
    FROM #T t
    INNER JOIN (
    	SELECT id, MAX(Annee) AS maxAnnee
    	FROM #T
    	GROUP BY id
    ) AS maxT
    	ON t.id = maxT.id
    WHERE t.Annee = maxAnnee

    Préparation du test unitaire :

    IF OBJECT_ID('tempdb..#T') IS NOT NULL 
    	DROP TABLE #T
    
    CREATE TABLE #T (
    	Id int,
    	Col2 int,
    	Annee int
    )
    
    INSERT INTO #T VALUES (1,1, 2001)
    INSERT INTO #T VALUES (1,2, 2002)
    INSERT INTO #T VALUES (1,3, 2003)
    INSERT INTO #T VALUES (1,4, 2004)
    INSERT INTO #T VALUES (2,1, 2001)
    INSERT INTO #T VALUES (2,2, 2002)
    INSERT INTO #T VALUES (2,3, 2003)
    INSERT INTO #T VALUES (2,4, 2004)

    vendredi 28 novembre 2014 06:29

Toutes les réponses

  • moi je dirais Select from nomdetable id when col2 = 4 and Date = 2004

    je pense qu'il n'y a pas de problème de performance; Mais peut être que je n'ai pas compris

    une deuxième solution Select from nomdetable id when col2 = max and Date = max

    Si la piste est bonne je te demande de me le dire


    Jean Noël Martin


    • Modifié JeanNoel53 lundi 24 novembre 2014 22:56
    lundi 24 novembre 2014 17:38
  • La requête : 

    SELECT t.*
    FROM #T t
    INNER JOIN (
    	SELECT id, MAX(Annee) AS maxAnnee
    	FROM #T
    	GROUP BY id
    ) AS maxT
    	ON t.id = maxT.id
    WHERE t.Annee = maxAnnee

    Préparation du test unitaire :

    IF OBJECT_ID('tempdb..#T') IS NOT NULL 
    	DROP TABLE #T
    
    CREATE TABLE #T (
    	Id int,
    	Col2 int,
    	Annee int
    )
    
    INSERT INTO #T VALUES (1,1, 2001)
    INSERT INTO #T VALUES (1,2, 2002)
    INSERT INTO #T VALUES (1,3, 2003)
    INSERT INTO #T VALUES (1,4, 2004)
    INSERT INTO #T VALUES (2,1, 2001)
    INSERT INTO #T VALUES (2,2, 2002)
    INSERT INTO #T VALUES (2,3, 2003)
    INSERT INTO #T VALUES (2,4, 2004)

    vendredi 28 novembre 2014 06:29