Join zwei Tabellen, die nur eindeutige Werte und maximal-Datum

Ich versuche zu join zwei Tabellen, aber nur Anzeige der eindeutigen Zeilen und das Letzte Datum.

Online suchen habe ich entdeckt, verschiedene Wege zu erreichen oder die Verbindung von zwei Tabellen, oder die Auswahl des eindeutigen Zeilen (und neuesten Datums) in eine einzige Tabelle. Wie würde ich mich über die Kombination dieser beiden?

Verknüpfen von zwei Tabellen:

select * 
from Table01 AS s
left join Table02 AS p on s.id = p.id

Bekommen eindeutigen Zeilen, und die Letzte Datum - in einer einzigen Tabelle:

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;

Ich denke, ich weiß wie es theoretisch (Table01 in der zweiten Abfrage das Ergebnis der ersten Abfrage, oder Holen Sie sich die neuesten date-Zeile vor joiing die zwei Tabellen), haben aber keine Ahnung, wie das in der Praxis anwenden.

EDIT:

Was ich versuche zu tun:

Join zwei Tabellen, eine Auswahl aller Spalten (Spalten mit mehrdeutigen Namen nicht enthalten sein oder eine eindeutige alias). Auf das neu erstellte verknüpfte Tabelle möchte ich anzeigen, die alle eindeutigen Zeilen (basierend auf einer id) mit dem neuesten Datum. (oder wählen Sie alternativ die aktuelle Zeilen-und als join von zwei Tabellen).

Beispiel Daten:

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

Auf die Frage in Bezug auf die verlinkte Lösung:

Mit diese Ergebnisse in die folgende Fehlermeldung:

The column 'xyz' was specified multiple times for 'Table01'.

Entfernen Sie alle doppelten Spalten (oder mit unique aliases), der folgende Fehler:

Column 'xyz' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

(Wobei "xyz" könnte eine Reihe von verschiedenen Spalten).

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;

Bitte beachten Sie, dieser Fehler ist hartnäckig, bis ich entfernen Sie alle Spalten in der select-Anweisung, außer für Spalte id und MaxDate. Das scheint Sinn zu machen, da ich nicht die Gruppe auf eine der anderen Spalten. Auch die Vorherige Abfrage (und die entsprechende Frage), die nur versuchen, das maximale Datum und fügt es das äquivalent von Zeilen in einer anderen Tabelle. Also ich wurde gefragt, für eine andere Methode, wie ich glaube nicht, dass dies funktionieren wird, auf die Daten festgelegt.

Danke,

  • Die Spalte 'xyz' wurde mehrfach angegeben, für 'Table' - verwenden Sie google für diese. Trotzdem, es bedeutet, dass zwei Spalten den gleichen Namen in der Liste der Tabellen, die Sie verknüpfen. Wenn Sie das brauchen, dann verwenden Sie Aliase.
  • waren Sie mit SELECT * wenn du die Fehler unten? Versuchen auflisten die Felder, die Sie wollen.
  • warum gehst du nicht einfach legen Sie Ihre Abfrage aus und erwartet die Ausgabe hier und machen es einfach für uns ?
  • Der Fehler kommt wahrscheinlich von der Unterabfrage (select * da die wahrscheinlichste Ursache, wie Daniel E. said). Jedoch, Sie haben nichts als alias 'Tabelle' hier, so könnte Sie pls zeigen uns die wahre Aussage, dass Fehler aus?
  • Danke, da hätte ich ein wenig mehr klar. Bitte sehen Sie sich die aktualisierten post.
InformationsquelleAutor Ben Z. | 2014-03-31
Schreibe einen Kommentar