2017-04-16 5 views
1

에서 최소값을 사용하여 두 조인 테이블 I은 할 T1SQL 번째 테이블

ID STATUS 
1 NEW 
2 NEW 

I은 ​​할 T2

ID 1의 최소 OWNDATE를 갖고 ID에 대한 B 이후 2 가진 때문에
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 

최소 OWNDATE

나는 결과로 얻고 싶은

1 NEW A 
2 NEW B 

하지만 가입 후 나는 내가 두 테이블

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

에서 최소를 찾을 수 MIN을 넣어 어디 확실하지 않다가 사전에 감사

+0

는 사용중인 DBMS, 예를 들어, MySQL은, SQL-서버, 오라클 태그를주세요. SQL의 일부 맛은보다 효율적인 응답을 줄 수있는 메소드를 허용합니다. –

+0

나는 그것을 지금했다 - db2. 감사 – Dejan

답변

1

아래는 일반 SQL의 솔루션으로 하위 쿼리를 사용하여 대부분의 데이터베이스에서 작동합니다. 너무 버전 번호를 알고있는 경우

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

대부분의 RDBMS에서는 윈도우를 사용할 수있는 분석 기능

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