2017-04-16 1 views
1

I haben T1SQL verbinden zwei Tabellen den Minimalwert aus der zweiten Tabelle mit

ID STATUS 
1 NEW 
2 NEW 

Ich habe T2

T1ID OWNER OWNDATE 

1  A  01.01.2017 10:00:00 
1  B  02.02.2017 10:00:00 
1  C  03.03.2017 10:00:00 
2  B  02.02.2017 10:00:00 
2  C  03.03.2017 10:00:00 

Da A für ID 1 die minimale OWNDATE hat und da B für ID 2 hat die minimale OWNDATE

ich will als Ergebnis erhalten

1 NEW A 
2 NEW B 

Aber nach dem ich nicht sicher verbinden bin, wo MIN eingeben, damit Sie sich entweder ich konnte das Minimum von zwei Tabellen

SELECT 
    T1.ID, T1.STATUS, T2.OWNER 
FROM 
    T1 
JOIN 
    T2 ON T1.ID = T2.T1ID 

Vielen Dank im Voraus

+0

markieren Sie bitte das DBMS Sie verwenden, zB MySQL, SQL-Server, Oracle und wenn die Versionsnummer auch bekannt. Einige Varianten von SQL erlauben Methoden, die effizientere Antworten geben könnten. –

+0

Ich habe es jetzt gemacht - db2. Vielen Dank – Dejan

Antwort

1

Die folgende ist eine Lösung in plain SQL, mit einer Unterabfrage, sollte es auf den meisten Datenbanken funktionieren.

SELECT 
    T1.ID, T1.STATUS, T2.OWNER 
FROM 
    T1 
JOIN 
    T2 
ON T1.ID = T2.T1ID 
    AND t2.owndate = (
     select min(owndate) FROM t2 
     where t2.T1ID = t1.id 
) 
1

In den meisten RDBMS finden Windows-analytische Funktionen

SELECT T1.ID, 
     T1.STATUS, 
     T.OWNER 
FROM T1 
    INNER JOIN 
(SELECT t2.*, 
     row_number() over(partition BY t1id 
         ORDER BY owndate) AS seq 
    FROM t2 
) t 
    ON t1.id=t.t1id 
    AND t.seq=1 
0
select t1.*, t3.OWNER 
from t1 
inner join lateral 
(
    select * from t2 
    where t1.id=t2.T1ID 
    order by t2.OWNDATE 
    fetch first rows only 
) t3 on 1=1 
Verwandte Themen