簡體   English   中英

選擇連接兩個表的Oracle PL / SQL

[英]Select that joins two tables Oracle PL/SQL

我有兩張桌子需要與Select聯接,但有一個問題。 這些表如下所示:table_price

Product_ID | Buy_date | Buy_price |
     1     | 16.10.01 |  2.50     |
     1     | 16.11.02 |  3.20     |
     2     | 16.10.31 |  3.80     |

表expire_date

Product_ID | Count  | Exp_date |
     1     |  1000  |  17.10.01|
     1     |  500   |  17.11.31|
     2     |  500   |  17.11.01|

我需要在Oracle PL / SQL中編寫一個select,這樣才能得到以下結果:

Product_ID| Count | Exp_date| last_buy_price|
     1    | 1000  | 17.10.01| 3.20          |
     1    | 500   | 17.31.31| 3.20          |
     2    | 500   | 17.11.01| 3.80          |

這意味着它將為我提供每個過期日期,其中包含表expire_date中產品的數量,並將其與來自table_price中的最后購買價格與product_id相匹配(總是與上次購買價格一致,按buy_date列排序)請大家幫幫我,我已經嘗試過許多代碼,但我仍然無法獲得令人滿意的結果

使用keep的相關子查詢可能是性能最高的方法:

select ed.*,
       (select max(p.buy_price) keep (dense_rank first order by p.buy_date desc)
        from table_price p
        where p.product_id = ed.product_id
       ) as last_buy_price
from expire_date ed;

您當然也可以在from子句中表達這一點:

select ed.*, p.last_buy_price
from expire_date ed left join
     (select p.product_id,
             max(p.buy_price) keep (dense_rank first order by p.buy_date desc) as last_buy_price
      from table_price p
     ) p
     on p.product_id = ed.product_id;

您可以使用ROW_NUMBER()

SELECT ed.*,
       tp.buy_price as last_buy_price
FROM expire_date ed
JOIN(SELECT s.*,
            ROW_NUMBER() OVER(PARTITION BY s.product_id ORDER BY s.buy_date DESC) as rnk
     FROM table_price s) tp
 ON(ed.product_id = tp.product_id and tp.rnk = 1 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM