我做了一个查询,查找产品列表及其详细信息(我们有一个在多个详细信息产品中拆分的父产品),以及一个表格,其中我们存储了此产品价格变化的历史记录。
我在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'
,我需要限制我的子查询查询。
有什么想法吗?
答案 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
以加入条件。