表: Contract_Price列:客户、部件、位置、货币、价格、Effective_date
案例:需要在生效日期前得到Part#的最新价格。(这是我能得到的),但也需要得到的价格之前,最近的生效日期在同一排。
示例:

要求:

注:这是销售团队需要审查和比较最近的合同价格与以前的价格在合同中。
执行:
SELECT *
FROM (
SELECT CUSTOMER,
PART,
LOCATION,
DATE_EFFECTIVE,
PRICE,
LAG(PRICE) OVER (PARTITION BY PART
ORDER BY DATE_EFFECTIVE) PRIOR_DATE,
RANK() OVER (PARTITION BY PART
ORDER BY DATE_EFFECTIVE DESC) RANK
FROM
V_OE_C_PART_PRICE ) A
WHERE A.RANK = 1错误:

发布于 2020-09-09 14:02:24
假设您使用的是Server、MySQL和PostreSQL的合理的最新版本,它们都应该支持分析函数(有些人将称之为窗口函数),这些都是对SQL标准的相对较新的添加。如果是这样的话,这样的事情应该能起作用。
SELECT *
FROM (
SELECT customer_number,
part_number,
location,
currency,
price current_price,
lag( price ) over (partition by part_number
order by effective_date) prior_price,
effective_date,
rank() over (partition by part_number
order by effective_date desc) rnk
FROM your_table ) a
WHERE a.rnk = 1我使用rank来选择最近的行。您可能可以用当前用于获取最后一行的任何方法来替代它,但这可能比使用解析函数的效率要低。
https://dba.stackexchange.com/questions/275233
复制相似问题