2012-08-23 26 views
0

我在SQL中的背景是有限的,但我的谷歌搜索不是,我覺得我可能只是錯過詞彙正確地問這個問題,所以希望超出我的問題的答案我可以獲得我需要的詞彙來進一步研究這個問題。在Oracle 8i中加入表來限制結果

我有一個部分表 - 零件 我有一個採購訂單表 - PO ,我有一個PO行項目表 - PO_LINEITEM

我試圖回答的問題是給定一個特定的部分我想獲取最新的採購訂單,然後查看我們支付的價格。

採購訂單表包含採購訂單填充時的日期(PO_DATE),PO_LINEITEM表包含有關特定行項目的信息,例如零件主鍵(PART_PRIMARYKEY)和價格(PART_PRICE)。 PARTS表並不重要,除了我需要返回一個PART主鍵,以便可以將結果視圖基於PARTS表

我已經通過了子查詢和可伸縮的子查詢和類似的,但我似乎無法找到正確的組合。

我從一開始的基礎:

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

正如你所期望它的價格和採購訂單中瀰漫的日期,此方法返回一個PO對象的每個實例的列表。最接近我來破解這是通過使用MAX功能上的日期,例如:

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 

這將返回一個最大日期我們爲某一特定部分支付每價格,所以:

PART 1234,£12.95,2012年12月12日
PART 1234,£13.00,14/08/2012
PART 1234.£11.15,2012年8月17日
PART 2345,£5.25,12/08/2012
PART 2345,£5.65,13/08/2012

我需要的是:

部分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

太棒了!列名混合了一點點(PART_PRIMARYKEY)來自另一張桌子,但稍微調整一下,這將工作。看來我需要更多地瞭解這個IN函數。同樣感謝你們提供更多關於分析功能的鏈接,看起來它有點午餐時間閱讀。 – ashcanschool