2014-02-26 3 views
0

테이블 A의 외부 조인을 테이블 B의 행에 사용하고 싶습니다 (존재하지 않을 수 있음). 가장 높은 시퀀스 번호를 가진 행에서 가져와야하는 B 테이블의 날짜 필드에 가입해야합니다.다른 열에서 MAX를 사용하여 행의 필드를 선택하는 방법은 무엇입니까?

표 B : 그래서 여기에 내가 (ID 1의 가장 높은 시퀀스 번호) A.id = 1 and A.a_date = 01/01/1950를 사용하여 ID 1 A와 B에 가입해야합니다

ID | A_DATE  | SEQNO 
1 01/01/1950 10 
1 01/01/2000 5 

.

나는이 구문이 올바른 생각하지 않는다 :

은 내가 잃었어요
SELECT ... 
FROM a, b 
WHERE a.id (+) = b.id 
    AND ... 

- 누군가가 도와 드릴까요?

감사합니다.

+0

데이타베이스 스키마를 모르지만 날짜 (고유하지 않은 행)에 가입하면 상당히 위험합니다. 대신 Google에 'JOIN'을 권하고 직접 배울 것을 권합니다. 몇 분 안에 배우는 주제가 아닙니다. –

답변

1

당신은 keep 키워드를 사용하여 seq_no의 최대 값과 관련된 a_date를 얻을 수 있습니다 :

이가 시도 쿼리의

select ... 
from a join 
    (select max(A_DATE) keep (dense_rank first order by seq_no desc) as max_a_date 
     from b 
    ) bmax 
    on a.a_date = b.max_a_date; 

나머지는이 날짜에 합류했다. 이 쿼리는 최소한 내가 문제를 이해할 때 외부 조인을 필요로하지 않는다.

참고 : 여기서는 테이블 b가 있다고 가정합니다. 테이블의 유무에 관계없이 작동하는 일반 SQL 쿼리를 작성할 수 없습니다.

0

정확하게 이해했는지 모르겠다.

select ... 
from (select id, 
       max(A_DATE) over(partition by id) as a_date 
     from a) a, 
    b 
where a.id  = b.id (+) 
    and a.a_date = b.b_date (+); 
+0

나는 그것이'max'보다는'last_value'이어야한다고 확신합니다. 나는'max'가 가장 큰'A_DATE'를 선택하고 (이것은'SEQNO에 의한 순서에 의해 영향을받지 않을 것입니다), 가장 큰 'SEQNO'를 가진'A_DATE'보다는 선택 될 것이라고 생각합니다. (또한, 나는 OP가 실제로 A보다 오히려 B보다 오히려 B보다 오히려 하위 쿼리를 필요로한다는 것을 확신하지만 질문은 혼란 스럽습니다.) – ruakh

+0

예, ORDER BY가 정확하지 않습니다. 그러나 나의 질의는 SEQNO를 고려하지 않고 가장 최근의 Date를 얻습니다. 당신이 옳다면 우리는 가장 큰 SEQNO로 날짜를 고려해야합니다. 그렇다면 고든은 좋은 대답을주었습니다. :) –

관련 문제