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.
InformationsquelleAutor Ben Z. | 2014-03-31