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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie sich die Daten, die Sie benötigen, um Ihr "verknüpfte Tabelle" vor. Sie können dann filtern die Zeilen, die Sie nicht mehr wollen, mit dem zusätzlichen sub-select mit der MAXDate. Die Verknüpfung dieser wieder auf die "verknüpfte Tabelle" muss durch die ID und das Datum, um sicherzustellen, dass Sie erhalten nur die Daten, die Sie wollen! Hoffe, das hilft :