Plsql 根据生效日期获取正确的价格
我无法根据生效日期为产品确定正确的价格 例如,我有两个表: a。交易表->包含订购的产品,以及 B物料主表->包含产品价格和这些价格的生效日期 在传输表内: …显示每个项目的2个价格。 我做了一些其他不同的查询风格 但是没有用,所以我决定 是时候寻求帮助了 谢谢你们中的任何一位 分享你的知识-希杰-Plsql 根据生效日期获取正确的价格,plsql,Plsql,我无法根据生效日期为产品确定正确的价格 例如,我有两个表: a。交易表->包含订购的产品,以及 B物料主表->包含产品价格和这些价格的生效日期 在传输表内: …显示每个项目的2个价格。 我做了一些其他不同的查询风格 但是没有用,所以我决定 是时候寻求帮助了 谢谢你们中的任何一位 分享你的知识-希杰- p、 对不起,我的帖子看起来都不对D如果返回的两行的生效日期不同,且小于发票日期,则可能需要将日期更改为“加入” 'AND T.INVOICE_DATE = ( select max(ef
p、 对不起,我的帖子看起来都不对D如果返回的两行的生效日期不同,且小于发票日期,则可能需要将日期更改为“加入”
'AND T.INVOICE_DATE = (
select max(effectivity_date)
from item_master
where effectivity_date < t.invoice_date)'
或者类似的,只获取发票日期前最近的一个价格。虽然您的问题的格式有点混乱,我无法获取所有细节,它看起来确实像是在寻找标准的SQL构造行号,同时包含分区和顺序-它在PostgreSql 8.4中,并且在Oracle[以及MS SQL Server和DB2…]中已经存在了相当长的一段时间,这是按组和SQL查询中的某个特定顺序选择top或top N的最简便的方法。查找它,请参阅PosgreSQL特定文档。分析是您的朋友。例如,您可以使用FIRST_VALUE函数获取给定产品的所有产品项目价格,按生效日期降序排序,然后只选择第一个。您还需要一个DISTINCT,以便每个事务只返回一行
SELECT DISTINCT
T.INVOICE_NO,
T.INVOICE_DATE,
T.PRODUCT_PKG_CODE,
T.PRODUCT_PKG_ITEM,
FIRST_VALUE(P.PRODUCT_ITEM_PRICE)
OVER (PARTITION BY T.INVOICE_NO, T.INVOICE_DATE,
T.PRODUCT_PKG_CODE, T.PRODUCT_PKG_ITEM
ORDER BY P.EFFECTIVITY_DATE DESC)
as PRODUCT_ITEM_PRICE
FROM TRANSACTION T,
ITEM_MASTER P
WHERE T.PRODUCT_PKG_CODE = P.PRODUCT_PKG_CODE
AND T.PRODUCT_PKG_ITEM = P.PRODUCT_PKG_ITEM
AND P.EFFECTIVITY_DATE <= T.INVOICE_DATE
AND T.INVOICE_NO = '1234';
SELECT DISTINCT
T.INVOICE_NO,
T.INVOICE_DATE,
T.PRODUCT_PKG_CODE,
T.PRODUCT_PKG_ITEM,
FIRST_VALUE(P.PRODUCT_ITEM_PRICE)
OVER (PARTITION BY T.INVOICE_NO, T.INVOICE_DATE,
T.PRODUCT_PKG_CODE, T.PRODUCT_PKG_ITEM
ORDER BY P.EFFECTIVITY_DATE DESC)
as PRODUCT_ITEM_PRICE
FROM TRANSACTION T,
ITEM_MASTER P
WHERE T.PRODUCT_PKG_CODE = P.PRODUCT_PKG_CODE
AND T.PRODUCT_PKG_ITEM = P.PRODUCT_PKG_ITEM
AND P.EFFECTIVITY_DATE <= T.INVOICE_DATE
AND T.INVOICE_NO = '1234';