-
MAX Multiple en SQL DB2
Bonjour,
Voici un nouveau problème que je rencontre. J'ai une table DB2 qui n'a aucune clé (ne me demandez pas pourquoi, faut que je fasse avec ...)
Dedans, j'ai 3 Colonnes : NUM, DATE et TIMESTAMP (unique)
Pour un NUM donné, j'ai plusieurs fois la même DATE à un TIMESTAMP différent mais également d'autres DATE antérieures
Je souhaites récupérer pour ce NUM, celui dont la DATE est la plus récente - MAX(DATE) - mais également, pour cette date la plus récente, celui qui a le TIMESTAMP le plus récent - MAX(TIMESTAMP)
Or, je ne vois pas comment utiliser la fonction MAX sur deux colonnes, même avec des requêtes imbriquées ...
Merci pour votre aide
-
bonjour,
pour la sous requete il faut utiliser un group by : http://sqlpro.developpez.com/cours/sqlaz/ensembles/
Ensuite vous pouvez joindre (http://sqlpro.developpez.com/cours/sqlaz/jointures/) cette sous-requete avec votre requête principale.
Et refaire un group by pour trouver le timestamp max.
Une autre solution consisterai à passer par une fonction de fenêtrage afin de faire une rupture / classement selon vos désirs http://sqlpro.developpez.com/article...clause-window/ (fonction row_number / partition by)
-
Cela ne fonctionnera pas ? Si ma sous reqête retourne la DATE max pour un NUM, la jointure elle va bien retourner les deux enregistrement (même NUM/DATE)
Je suis passé par un FETCH ROW 1 ONLY en triant sur le TIMESTAMP pour ne garder que le premier des doublons ...
-
d'où l'utilité d'un deuxième group by. (cf la 4eme ligne de mon message)
Là vous avez fait à coup sur une requête scalaire, pas terrible si vous avez de la volumétrie.
-
Bonjour,
Si j'ai bien compris le problème, une requête de ce type devrait répondre à votre problème :
select t1.num, t1.date, max(timestamp)
from t_test2 as t1
inner join
(select num, max(date) as maxdate from t_test2
group by num) t2
on t1.num=t2.num and t1.date=t2.maxdate
group by t1.num, t1.date
order by t1.num
Données exemple de la table t_test2 :
NUM DATE TIMESTAMP
1 03/09/12 2012-09-05-17.02.10.863290
1 04/09/12 2012-09-05-17.01.53.472888
1 05/09/12 2012-09-05-17.01.01.903054
1 05/09/12 2012-09-05-17.02.04.497027
1 05/09/12 2012-09-05-17.02.06.591343
2 03/09/12 2012-09-05-17.02.38.430884
2 04/09/12 2012-09-05-17.02.42.353825
2 04/09/12 2012-09-05-17.03.03.820583
3 05/09/12 2012-09-05-17.02.50.014186
3 05/09/12 2012-09-05-17.02.54.766432
3 05/09/12 2012-09-05-17.02.57.582638
3 05/09/12 2012-09-05-17.02.58.909715
Données résultat de la requête :
NUM DATE MAX ( TIMESTAMP )
1 05/09/12 2012-09-05-17.02.06.591343
2 04/09/12 2012-09-05-17.03.03.820583
3 05/09/12 2012-09-05-17.02.58.909715