Faire un max sur une union [SQL server] - SQL/NoSQL - Programmation
Marsh Posté le 06-04-2005 à 15:20:08
Select Max(Date)
From ( Select Date from Tableau 1
where .....
Union
Select Date from Tableau 2
where ......
);
En pratique, en général, les noms de champs sont différents, il faut donc leur donner le même nom pour que ce soit plus lisible (et que ça marche ) :
Select Max(Date)
From ( Select Date_Tableau1 AS Date from Tableau 1
where .....
Union
Select Date_Tableau2 AS Date from Tableau 2
where ......
);
Marsh Posté le 06-04-2005 à 15:28:12
ha merci Beegee, c etait tout bête comme requête.
un grand merci
Marsh Posté le 06-04-2005 à 16:15:59
Si c'est juste pour faire un MAX(Date), je te conseille de faire un UNION ALL, car la date n'a pas besoin d'être unique. Un UNION ALL est infiniment plus rapide qu'un UNION simple.
Marsh Posté le 06-04-2005 à 16:41:59
oui mais UNION ALL ne fait pas partie de la norme? est ce que ça marchera sur SQL SERVER?
Marsh Posté le 06-04-2005 à 16:46:26
Si, il fait partie de la norme SQL, on le retrouve sur tous les SGBD que je connais :
SQL Server, Oracle, Access, DB2.
Marsh Posté le 06-04-2005 à 16:48:07
Doc SQL Server 2000 :
Référence de Transact-SQL
Opérateur UNION
Associe les résultats de plusieurs requêtes en un seul jeu de résultats constitué de toutes les lignes appartenant aux requêtes de l'union. Cette opération diffère de l'utilisation des jointures combinant les colonnes des deux tables.
Voici deux règles essentielles pour combiner les jeux de résultats de deux requêtes avec UNION :
Le nombre et l'ordre des colonnes doivent être identiques dans toutes les requêtes.
Les types de données doivent être compatibles.
Syntaxe
{ < query specification > | ( < query expression > ) }
UNION [ ALL ]
< query specification | ( < query expression > )
[ UNION [ ALL ] < query specification | ( < query expression > )
[ ...n ] ]
Arguments
< query_specification > | ( < query_expression > )
Spécification ou expression de requête qui renvoie les données à combiner avec les données d'une autre spécification ou expression de requête. Les définitions des colonnes faisant partie d'une opération UNION ne doivent pas forcément être identiques, mais doivent être compatibles à travers une conversion implicite.
Le tableau suivant montre les règles de comparaison des types de données et des options des (énièmes) colonnes correspondantes.
Type de données de la énième colonne Type de données de la énième colonne de la table de résultats
Incompatibilité du type de données (aucune prise en charge implicite par Microsoft® SQL Server de la conversion des données) Erreur renvoyée par SQL Server
Type char de longueurs fixes L1 et L2 Colonne de type char dont la longueur est égale à la plus grande des deux (L1 et L2)
Type binary de longueurs fixes L1 et L2 Colonne de type binary dont la longueur est égale à la plus grande de L1 et L2
L'une des colonnes ou les deux sont de type char et de longueur variable. Colonne de type char de longueur variable égale au maximum des longueurs spécifiées pour les énièmes colonnes
L'une des colonnes ou les deux sont de type binary et de longueur variable. Colonne de type binary de longueur variable égale au maximum des longueurs spécifiées pour les énièmes colonnes
Type numérique (par exemple, smallint, int, float, money). Type de données de la colonne offrant la plus grande précision des deux colonnes. Par exemple, si la énième colonne de la table A est de type int (entier) et la énième colonne de la table B est du type float, le type de données de la énième colonne de la table de résultats sera float, qui est plus précis que int.
Les descriptions des deux colonnes contiennent la valeur NOT NULL. Spécifie la valeur NOT NULL (valeurs NULL non autorisées)
UNION
Indique que les jeux de résultats multiples doivent être associés et renvoyés dans un seul jeu de résultats.
ALL
Incorpore toutes les lignes dans les résultats, y compris les doublons. Si ALL n'est pas spécifié, tous les doublons de lignes sont supprimés.
©1988-2000 Microsoft Corporation. Tous droits réservés.
Marsh Posté le 06-04-2005 à 16:59:42
merci les gens pour vos conseil
en effet j'vais utiliser union all historie de rendre ça plus rapide
Marsh Posté le 06-04-2005 à 11:58:03
Voila j'ai un problème de conception
je recupere la colonne date d une table
je recupere la colonne date d une autre table
je fais l union des 2
ce qui me renvoie une seul colonne date
sur cette colonne date je prends uniquement la date max
donc est il possible de faire ainsi
Max ( Select Date from Tableau 1
where .....
Union
Select Date from Tableau 2
where ......
)
merci
PS : pour l'instant impossible de tester ma requête