首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PSQL中获取最新日期记录的前一个日期记录

如何在PSQL中获取最新日期记录的前一个日期记录
EN

Database Administration用户
提问于 2020-09-09 13:19:21
回答 1查看 604关注 0票数 -1

表: Contract_Price列:客户、部件、位置、货币、价格、Effective_date

案例:需要在生效日期前得到Part#的最新价格。(这是我能得到的),但也需要得到的价格之前,最近的生效日期在同一排。

示例:

要求:

注:这是销售团队需要审查和比较最近的合同价格与以前的价格在合同中。

执行:

代码语言:javascript
复制
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

错误:

EN

回答 1

Database Administration用户

发布于 2020-09-09 14:02:24

假设您使用的是Server、MySQL和PostreSQL的合理的最新版本,它们都应该支持分析函数(有些人将称之为窗口函数),这些都是对SQL标准的相对较新的添加。如果是这样的话,这样的事情应该能起作用。

代码语言:javascript
复制
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来选择最近的行。您可能可以用当前用于获取最后一行的任何方法来替代它,但这可能比使用解析函数的效率要低。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/275233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档