2012-08-23 3 views
0

SQL 내 배경이 제한되어 있지만 인터넷 검색이 불가능합니다. 내 질문에 대한 답변을 넘어서이 질문에 올바르게 답변 할 수있는 어휘가 누락되었을 수 있습니다. 나는이 문제를 더 연구 할 필요가있는 어휘를 얻는다. 결과를 제한하기 위해 Oracle 8i의 테이블 조인하기

나는 부분 테이블이 - 부품 내가 구매 주문 테이블이 - PO 을하고 난 PO 광고 항목 테이블이 - 내가 대답을 시도하고있어 문제는 내가 원하는 특정 부분 주어진다 PO_LINEITEM

을 최신 구매 주문서를 받고 우리가 지불 한 가격을 살펴보십시오.

PO 테이블에는 구매 주문이 채워진 날짜 (PO_DATE)가 저장되며 PO_LINEITEM 테이블에는 부품 기본 키 (PART_PRIMARYKEY) 및 가격 (PART_PRICE)과 같은 특정 광고 항목 관련 정보가 보관됩니다. PARTS 테이블에서 결과 뷰를 기반으로 할 수 있도록 PART 기본 키를 반환해야한다는 점을 제외하고는 PARTS 테이블이 나머지만큼 중요하지 않습니다.

하위 쿼리와 확장 가능 하위 쿼리를 사용했습니다. 그리고 같은,하지만 나는 올바른 조합을 찾을 수 없습니다. 당신이 그것을 구매 주문 채워진 된 날짜 가격의와 함께이가 PO에서 개체의 모든 인스턴스의 목록을 반환 기대로

SELECT a.PO_DATE, b.PART_PRIMARYKEY, b.PART_PRICE 
FROM PO a, PO_LINEITEM b 
WHERE a.PO_PRIMARYKEY = b.PO_PRIMARYKEY 

:

나는의 기초에서 시작했다. 그래서,

SELECT MAX(a.PO_DATE) AS DATE, b.PART_PRIMARYKEY, b.PART_PRICE 
FROM PO a, PO_LINEITEM b 
WHERE a.PO_PRIMARYKEY = b.PO_PRIMARYKEY 
GROUP BY b.PART_PRIMARYKEY, b.PART_PRICE 

이것은 우리가 특정 부분에 대해 지불 각각의 가격 a를위한 최대 날짜를 반환 :

PART을 가장 가까운 나는이 같은 날짜에 MAX 함수를 사용하는 것입니다 균열왔다 1234 £ 12.95, 2012년 12월 8일
PART 1234 £ 13.00, 14/08/2012
PART 1234 £ 11.15, 17/08/2012
PART 2345 £ 5.25, 2012년 12월 8일
2345, £ 5.65, 13/08/2012

내가해야 할 것은 :

PART 1234 £ 11.15, 17/08/2012
PART 2345 £ 5.65, 13/08/2012

PART_PRIMARYKEY로 불과 그룹 내가 할 수있는 것을한다면 우수하지만, ORA-00979를 사용하면 GROUP BY 표현이 아닙니다. 나는이 문제를 해결 어휘의 나의 부족은 답을 찾는 나를 방해되는 사람이 올바른 방향으로 날 지점 수 있다면 내가

그래서 잘하면 내가 물어 아니에요 감사하게 될 거라고 그래서 난, 기분이 말했듯이

단어는 마법의 조합을 사용하지 않았기 때문에 격일에 물어 보는 질문이지만 찾지 못했습니다.

제공 할 수있는 도움에 감사드립니다.

답변

1

분석 함수 찾기. 그들은 8i에서 소개되었지만 나는 그들이 얼마나 훌륭한 지 그들이 11 월에 얼마나 좋았는지에 비해 당시에 얼마나 진보적인지 잘 모르겠습니다.내가 사용했던 몇 가지 링크가 그들을 이해하기 :

http://www.oracle-base.com/articles/misc/analytic-functions.php

http://www.orafaq.com/node/55

비록 같은이 (당신의 열 이름이 섞여 나는 모른다)이 충분 하듯이 하위 쿼리

select A.PART_PRIMARYKEY, B.PART_PRICE, A.PO_DATE 
    from PO A, PO_LINEITEM B 
where A.PO_PRIMARYKEY = B.PO_PRIMARYKEY 
     and (A.PART_PRIMARYKEY, A.PO_DATE) in 
      ( select A.PART_PRIMARYKEY, max(A.PO_DATE) 
        from PO A, PO_LINEITEM B 
       where A.PO_PRIMARYKEY = B.PO_PRIMARYKEY 
       group by A.PART_PRIMARYKEY); 
+0

Brilliant! 열 이름이 다른 테이블에서 나온 약간의 비트 (PART_PRIMARYKEY)가 섞여 있지만,이게 잘 작동합니다. 이 IN 함수에 대해 더 자세히 알아야 할 것 같습니다. 분석 기능에 대한 자세한 정보에 대한 링크를 제공해 주셔서 감사합니다. 점심 시간에 약간의 독서가 될 것 같습니다. – ashcanschool

관련 문제