J'ai lu plusieurs sujet du forum sur le group by :
http://www.developpez.net/forums/d13...by-erreur-sql/
http://www.developpez.net/forums/d10...champs-resolu/
http://www.developpez.net/forums/d12...on-agregation/
Ansi que l'excellent article de Roland Bouman :
http://cedric-duprez.developpez.com/...group-by/#L9-C

Malgrès cela je n'arrive toujours pas à mes fins....

Explication du problème ,
Sur une base de donnée Orcale , j'ai une table HISTORIQUE :
HISTORIQUE_ID VERSION_COURANTE MACHINE_ID DATE_LOG NOM_USER APPLICATION_ID

Exemple de données :
6;2013-07-02 v2;6545612313561322;03/07/2013 11:43;Toto;application2
5;2013-07-02 v2;6545612313561322;03/07/2013 11:43;Toto;application1
4;2013-07-02 v1;6545612313561322;03/07/2013 11:41;Titi;application1
3;2013-07-02 v1;6545612313561322;03/07/2013 11:41;Titi;application2
2;2013-07-02 v1;5654654654564654;03/07/2013 10:34;Toto;application2
1;2013-07-02 v1;5654654654564654;03/07/2013 10:34;Toto;application1

Je souhaite récupérer pour chaque machine et chaque application installé sur la machine, la dernière version du logiciel installé.

Ma requette :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT MAX(HISTORIQUE.DATE_LOG) HISTORIQUE.MACHINE_ID, HISTORIQUE.APPLICATION_ID,VERSION_COURANTE
FROM FSAGATEWAY.HISTORIQUE HISTORIQUE
GROUP BY HISTORIQUE.MACHINE_ID, HISTORIQUE.APPLICATION_ID
Évidement je me prend l'erreur :
ORA-00979 N'est pas une expression group by
....

J'opte pour la solution proposé dans l'article , à savoir utilisé un fonction d'agrégation MAX par exemple sur la colonne VERSION_COURANTE.
(Je sentais déjà que ce n'etait pas la bonne solution à utiliser...)
Ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT MAX(HISTORIQUE.DATE_LOG) HISTORIQUE.MACHINE_ID, HISTORIQUE.APPLICATION_ID,MAX(VERSION_COURANTE)
FROM FSAGATEWAY.HISTORIQUE HISTORIQUE
GROUP BY HISTORIQUE.MACHINE_ID, HISTORIQUE.APPLICATION_ID
ça fonctionnement uniquement parce que mes noms de version utilisent (pour l'instant) une syntaxe croissante (alphabétiquement parlent). Donc les résultat de MAX (DATE_LOG) et de MAX(VERSION_COURANTE) "coïncide".


Demain ... j'ai ce jeu de donnée plutôt :
6;alpha;6545612313561322;03/07/2013 11:43;Toto;application2
5;alpha;6545612313561322;03/07/2013 11:43;Toto;application1
4;2013-07-02 v1;6545612313561322;03/07/2013 11:41;Titi;application1
3;2013-07-02 v1;6545612313561322;03/07/2013 11:41;Titi;application2
2;v1.0;5654654654564654;03/07/2013 10:34;Toto;application2
1;v1.0;5654654654564654;03/07/2013 10:34;Toto;application1
ça ne marchera pas ....


HELP ME