UNION de 4 tables, GROUP BY NomServeur HAVING MAX(Date) - SQL/NoSQL - Programmation
Marsh Posté le 03-09-2013 à 08:24:47
Voila ce que je ferai:
Code :
|
Tu peux évidement remplacer le cte (common table expression) par la query en entier, je voulais juste pas la copier 2x
Marsh Posté le 03-09-2013 à 22:05:39
Hello Oliiii,
Déjà, merci pour ta réponse, que je viens de tester. Malheureusement, les serveurs continuent à apparaitre en double, triple,... car présent sur plus d'une table. Mon objectif est qu'un serveur, même présent sur plusieurs table, n'apparaissent qu'une seule fois, celui provenant de la table ayant la date la plus récente et non d'afficher ce même serveur avec la date la plus récentes pour chaque table. Comme pour ce petit table où le serveur S1 apparait 3 fois car présent dans 3 tables (ALPHA, BETA, DETLA) alors que seul la première ligne devrait être afficher car on voit clairement que c'est dans la table ALPHA que S1 à la date la plus résente. La 2e et 3e ligne ne devraient donc pas s'afficher car pour ce même serveur S1, les date dans BETA et DELTA sont plus ancienne.
ALPHA | S1 | 2013-02-09
BETA | S1 | 2013-01-09
DELTA | S1 | 2013-01-03
ALPHA | S2 | 2013-03-24
ALPHA | S3 | 2013-03-30
BETA | S3 | 2013-07-12
ALPHA | S5 | 2013-02-02
J'essaies de penser ce problème différement comme par exemple n'afficher que le nom du serveur et la table où la date pour ce serveur est la plus récente, mais j'avoue que plus j'y pense et plus je m'embrouille ... :-S
Des idées ?
Marsh Posté le 04-09-2013 à 09:30:35
La solution que je propose fait bien ce que tu veux (c'est pour ça qu'il y a un join de 2x la même query en gros).
Voila le resultat de la query:
Code :
|
La query sans cte ça donne ça:
Code :
|
Marsh Posté le 04-09-2013 à 11:26:02
Et bien, chapeau bas mon cher Oliiii, cela fonctionne en effet. J'ai juste du m'assurer à mettre les noms des serveurs en majuscule avec UPPER pour éliminer ces doublons qui étaient en fait ces mêmes serveurs mais avec une casse différente, je retrouvais 'S1' et 's1'. Donc, un tout grand merci à toi.
Solvap
Marsh Posté le 03-09-2013 à 04:50:49
Bonjour,
Je me permets de vous demander votre aide car malgré de nombreuses recherches, je n'ai pu trouver de solution à mon problème.
En quelques mots, j'ai 4 tables (alpha, beta, gamma, delta), chacune contenant 2 colonnes (NomServeur, DateEntree).
Chaque table pouvant contenir plusieurs fois le même nom de serveur (mais alors avec une date d'entrée différentes). Ces même serveurs pouvant également se trouver dans d'autres tables.
Ce que j'aimerais obtenir c'est une table avec 3 colonnes:
1) Nom de la table où a été trouvé la date la plus récente pour le serveur nommé en colonne 2.
2) Nom de chaque serveur apparaisant au moins une fois dans une des 4 table
3) Date d'entrée la plus récente trouver pour le serveur nommé en colonne 2.
Exemple:
TABLE | NomServeur | DateEntree
-------------------------------------------
ALPHA | S1 | 2013-02-09
ALPHA | S2 | 2013-03-24
BETA | S3 | 2013-07-12
ALPHA | S5 | 2013-02-02
Explication:
- 1ere ligne: Peu importe si S1 se trouvait sur une ou plusieurs table (et même plusieurs fois dans la même), c'est sur la table BETA que la date la plus récente pour ce serveur a été trouvée et c'est 2013-02-09.
- 2e ligne: Peu importe si S2 se trouvait sur une ou plusieurs table (et même plusieurs fois dans la même), c'est sur la table BETA que la date la plus récente pour ce serveur a été trouvée et c'est 2013-03-24.
- 3e ligne: Peu importe si S3 se trouvait sur une ou plusieurs table (et même plusieurs fois dans la même), c'est sur la table BETA que la date la plus récente pour ce serveur a été trouvée et c'est 2013-07-12.
- Et ainsi de suite...
Pour info, en utilisant un GROUP BY sur la TABLE et NomServeur, j'obtiens ceci:
TABLE | NomServeur | DateEntree
----------------------------------------------------------
ALPHA | S1 | 2013-02-09
BETA | S1 | 2013-01-09
DELTA | S1 | 2013-01-03
ALPHA | S2 | 2013-03-24
ALPHA | S3 | 2013-03-30
BETA | S3 | 2013-07-12
ALPHA | S5 | 2013-02-02
Comme vous pouvez le voir, S1 et S3 sont présent plusieurs fois alors que j'aimerais ne garder que la table dans la date est la plus récente...
J'espère que mes explications sont assez claire pour que vous puissiez m'aider.
Merci d'avance.
Solvap