Frage

Dies sollte einfach genug sein, aber irgendwie mein Gehirn aufgehört zu arbeiten.

Ich habe zwei verknüpften Tabellen:

Tabelle 1:

ID (PK), Value1

Tabelle 2:

BatchID, Table1ID (FK to Table 1 ID), Value2

Beispieldaten:

Tabelle 1:

ID  Value1
1   A
2   B

Tabelle 2:

BatchID  Table1ID  Value2
1        1         100
2        1         101
3        1         102
1        2         200
2        2         201

Nun, für jeden Datensatz in der Tabelle 1, würde Ich mag einen passenden Datensatz auf Tabelle 2, zu tun, sondern nur die jüngsten (Batch-ID ist sequentiell). Ergebnis für das obige Beispiel wäre:

Table1.ID  Table1.Value1  Table2.Value2
1          A              102
2          B              201

Das Problem ist einfach, wie Ergebnis mit Table2 begrenzen verbinden. Es gab ähnliche Fragen auf SO, kann aber nichts wie meine finden. Hier ist eine auf MySQL, die ähnlich aussieht: Begrenzen einer SQL JOIN

Ich bin zu jedem Ansatz offen, obwohl Geschwindigkeit der Hauptpriorität ist immer noch da es eine große Datenmenge sein wird.

War es hilfreich?

Lösung

WITH Latest AS (
    SELECT Table1ID
        ,MAX(BatchID) AS BatchID
    FROM Table2
    GROUP BY Table1ID
)
SELECT *
FROM Table1
INNER JOIN Latest
    ON Latest.Table1ID = Table1.ID
INNER JOIN Table2
    ON Table2.BatchID = Latest.BatchID

Andere Tipps

SELECT  id, value1, value2
FROM    (
        SELECT  t1.id, t2.value1, t2.value2, ROW_NUMBER() OVER (PARTITION BY t1.id ORDER BY t2.BatchID DESC) AS rn
        FROM    table1 t1
        JOIN    table2 t2
        ON      t2.table1id = t1.id
        ) q
WHERE   rn = 1

Versuchen

select t1.*,t2.Value2
from(
select Table1ID,max(Value2) as Value2
from [Table 2]
group by Table1ID) t2
join [Table 1] t1 on t2.Table1ID = t1.id

So oder GROUP BY oder WHERE-Klausel, die auf dem neuesten Filter:

SELECT * FROM Table1 a
INNER JOIN Table2 b ON (a.id = b.Table1ID)
WHERE NOT EXISTS(
      SELECT 1 FROM Table2 c WHERE c.Table1ID = a.id AND c.BatchID > b. BatchID
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top