连接中的Oracle动态分区

时间:2016-03-21 14:01:01

标签: sql oracle

我做了一个查询,查找产品列表及其详细信息(我们有一个在多个详细信息产品中拆分的父产品),以及一个表格,其中我们存储了此产品价格变化的历史记录。

我在oracle数据库上运行良好的以下查询:

SELECT ref, size, is_promotion, original_price, histo_npx as "current_price" , histo_apx as "old_price"
from product
    left join product_details on product_ref = ref
    left join (select product_ref, histo_npx, histo_dex, histo_apx,
                    rank() over (partition by price.product_ref order by histo_dex DESC) modif_rank
               from price
               where histo_npx is not null
                 and price.product_ref = 'MY_REF'
                 and price.product_size = 'MY_SIZE'
               order by price.histo_dex, price.product_ref) on product_ref = ref
where (modif_rank = 1 or modif_rank is null)
  and ref = 'MY_REF'
  and size = 'MY_SIZE'

但我需要动态制作它而不强制MY_REF和MY_SIZE的值。 当我删除子查询和查询中的where时,它当然不好,因为我拥有数据库中最古老产品的所有历史记录,所以如果我删除全局and ref = 'MY_REF' and size = 'MY_SIZE',我需要限制我的子查询查询。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果要将查询放在视图或子查询中,并在外部查询中动态添加ref = 'MY_REF' and size = 'MY_SIZE'的过滤器的位置
您可以使用此类查询:

SELECT ref, size, is_promotion, original_price, histo_npx as "current_price" , histo_apx as "old_price"
from product
    left join product_details on product_ref = ref
    left join (select product_ref,product_size, histo_npx, histo_dex, histo_apx,
                    rank() over (partition by price.product_ref, price.product_size order by histo_dex DESC) modif_rank
               from price
               where histo_npx is not null) on product_ref = ref and product_size = size
where (modif_rank = 1 or modif_rank is null)

我删除了

                 and price.product_ref = 'MY_REF'
                 and price.product_size = 'MY_SIZE'
  and ref = 'MY_REF'
  and size = 'MY_SIZE'

滤波器。
同时将price.product_size添加到rank()分区依据和product_size=size以加入条件。