Joindre deux tables, seul l'affichage des valeurs uniques et maxium de la date
J'essaie de joindre deux tables, mais de n'afficher que les lignes uniques et la date la plus récente.
À la recherche en ligne, j'ai découvert différentes façons d'atteindre ou de l'union de deux tables, ou la sélection des lignes uniques (et plus tard) dans une seule table. Comment pourrais-je aller sur la combinaison de ces deux?
Joindre deux tables:
select *
from Table01 AS s
left join Table02 AS p on s.id = p.id
Obtenir des lignes uniques et la date la plus récente - dans un seul tableau:
select * from (
select id_01, id_02, max(dt_date) AS MaxDt
from Table01
group by id_01, id_02) TempTable
join Table01 ComTable on
TempTable.id_01 = ComTable.id_01 and
TempTable.id_02 = ComTable.id_02 and
TempTable.MaxDt = ComTable.dt_date
order by ComTable.dt_date desc;
Je pense que je sais comment le faire théoriquement (Table01
dans la deuxième requête doit être le résultat de la première requête, ou obtenir la dernière date d'affilée avant de joiing les deux tables), mais n'ont aucune idée de comment l'appliquer dans la pratique.
EDIT:
Ce que je suis en train de faire:
Joindre deux tables, la sélection de toutes les colonnes (colonnes avec des noms ambigus ne sera pas inclus ou affectés d'un alias unique). Sur cette fraîchement créé table jointe, je voudrais afficher toutes les lignes uniques (basé sur un id) avec la date la plus récente. (ou sinon, sélectionnez la dernière ligne unique et de joindre deux tables).
De données, par exemple:
Table01
ID column01 column02 column0X
10 test test123 testABC
Table02
ID columnA columnB columnY dt_date
10 data01 data02 data03 01/01/2012
10 data11 data12 data13 02/02/2012
10 data21 data22 data23 03/03/2012
10 data31 data32 data33 04/04/2012
Joined Table
ID column01 column02 column0X columnA columnB columnY dt_date
10 test test123 testABC data01 data02 data03 01/01/2012
10 test test123 testABC data11 data12 data13 02/02/2012
10 test test123 testABC data21 data22 data23 03/03/2012
10 test test123 testABC data31 data32 data33 04/04/2012
Actual Output
ID column01 column02 column0X columnA columnB columnY dt_date
10 test test123 testABC data31 data32 data33 04/04/2012
Sur la question du lié solution:
À l'aide de cette résultats dans l'erreur suivante:
The column 'xyz' was specified multiple times for 'Table01'.
Retrait de tous les doublons de colonnes (ou de l'utilisation unique d'emprunt), provoque l'erreur suivante:
Column 'xyz' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
(Où "xyz" pourrait être un certain nombre de différentes colonnes.)
SELECT
p.*, d.*
FROM Table01 p
left join
( SELECT
alotofcolumnshere,MAX(dt_date) MaxDate
FROM Table02 s
GROUP BY s.id
) d ON p.id = d.id
ORDER BY d.maxdate DESC;
Veuillez noter que cette erreur est persistant jusqu'à ce que j'ai supprimer toutes les colonnes dans l'instruction select, sauf pour la colonne id
et MaxDate
. Ce qui semble de bon sens que je ne peux pas le groupe sur les autres colonnes. Aussi la requête précédente (et la question correspondante) uniquement essayer de trouver le maximum de la date et de l'ajouter à l'équivalent lignes d'une autre table. Par conséquent, j'ai demandé pour une autre méthode, que je ne pense pas que ce sera le travail sur le jeu de données.
Merci,
- La colonne 'xyz' a été spécifié à plusieurs reprises pour "Table" d'utiliser google pour cela. De toute façon, cela signifie que les deux colonnes ont le même nom dans la liste des tables qui vous unissent. Si vous avez besoin, puis utiliser des alias.
- étiez-vous à l'aide de
SELECT *
lorsque vous avez obtenu l'erreur en bas? Essayez d'inscription les champs que vous souhaitez. - pourquoi ne pas vous suffit de mettre votre requête et la production prévue d'ici et de le rendre facile pour nous ?
- L'erreur vient probablement de la sous-requête (select * étant la cause la plus probable, comme Daniel E. a dit). Cependant, vous n'avez pas de quoi alias "Table" ici, donc, pourriez-vous pls nous montrer la vraie instruction d'erreur?
- Merci à vous, j'aurais été un peu plus clair. Veuillez consulter la mise à jour du post.
Vous devez vous connecter pour publier un commentaire.
Vous devez joindre les données dont vous avez besoin pour obtenir votre "Table jointe" ci-dessus. Vous pouvez ensuite filtrer les lignes que vous ne voulez plus avec les autres sous sélectionnez-la avec la MAXDate. La jointure pour ce retour sur la "Table jointe" doit être par ID et la Date afin de s'assurer que vous obtenez seulement les données que vous voulez! Espérons que cela aide :