Meilleur auteur de réponses
Sélectionner une valeur unique et pour chaque valeur lui associer sa valeur la plus recente

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
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)
- Proposé comme réponse Grégory_Nail vendredi 28 novembre 2014 06:29
- Marqué comme réponse Teodora Sharkova dimanche 30 novembre 2014 12:53
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
-
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)
- Proposé comme réponse Grégory_Nail vendredi 28 novembre 2014 06:29
- Marqué comme réponse Teodora Sharkova dimanche 30 novembre 2014 12:53