oracle窗口函数中range interval的使用

oracle窗口函数中range interval配合一般用来针对指定时间范围进行统计。其中range表示范围,between...and 表示之前的范围和之后的范围 , CURRENT ROW表示当前行,INTERVAL '1'  day/month/year preceding/following 表示时间范围的选择。

 

--求采购订单成交记录中 同物料过去一年的采购平均单价

SELECT
W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID,
W_PRODUCT_D.Prod_Name, --item name
W_PURCH_SCHEDULE_LINE_F.UNIT_PRICE,
W_DAY_D.DAY_DT ORDER_DT,
W_PURCH_SCHEDULE_LINE_F.PURCH_ORDER_NUM,
W_PURCH_SCHEDULE_LINE_F.PURCH_ORDER_ITEM,
W_PURCH_SCHEDULE_LINE_F.PURCH_SCHEDULE_NUM,
W_PURCH_SCHEDULE_LINE_F.RELEASE_NUM,
AVG(W_PURCH_SCHEDULE_LINE_F.UNIT_PRICE)OVER(PARTITION BY W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID ORDER BY TRUNC(W_DAY_D.DAY_DT) RANGE BETWEEN INTERVAL '1' year preceding and current row) AVG_PRICE_PAST
FROM W_PURCH_SCHEDULE_LINE_F,
W_PRODUCT_D,
W_DAY_D
WHERE
W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID=W_PRODUCT_D.ROW_WID
AND W_PURCH_SCHEDULE_LINE_F.ORDERED_ON_DT_WID=W_DAY_D.ROW_WID

 

--求采购订单成交记录中 同物料未来一个月的采购平均单价

SELECT 

W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID,
W_PRODUCT_D.Prod_Name, --item name
W_PURCH_SCHEDULE_LINE_F.UNIT_PRICE,
W_DAY_D.DAY_DT ORDER_DT,
W_PURCH_SCHEDULE_LINE_F.PURCH_ORDER_NUM,
W_PURCH_SCHEDULE_LINE_F.PURCH_ORDER_ITEM,
W_PURCH_SCHEDULE_LINE_F.PURCH_SCHEDULE_NUM,
W_PURCH_SCHEDULE_LINE_F.RELEASE_NUM,
AVG(W_PURCH_SCHEDULE_LINE_F.UNIT_PRICE)OVER(PARTITION BY W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID ORDER BY TRUNC(W_DAY_D.DAY_DT) RANGE BETWEEN current row and INTERVAL '1' month following) AVG_PRICE_PAST
FROM W_PURCH_SCHEDULE_LINE_F,
W_PRODUCT_D, 
W_DAY_D
WHERE
W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID=W_PRODUCT_D.ROW_WID
AND W_PURCH_SCHEDULE_LINE_F.ORDERED_ON_DT_WID=W_DAY_D.ROW_WID

 

--求采购订单成交记录中 同物料5天内的采购平均单价

SELECT 

W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID,
W_PRODUCT_D.Prod_Name, --item name
W_PURCH_SCHEDULE_LINE_F.UNIT_PRICE,
W_DAY_D.DAY_DT ORDER_DT,
W_PURCH_SCHEDULE_LINE_F.PURCH_ORDER_NUM,
W_PURCH_SCHEDULE_LINE_F.PURCH_ORDER_ITEM,
W_PURCH_SCHEDULE_LINE_F.PURCH_SCHEDULE_NUM,
W_PURCH_SCHEDULE_LINE_F.RELEASE_NUM,
AVG(W_PURCH_SCHEDULE_LINE_F.UNIT_PRICE)OVER(PARTITION BY W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID ORDER BY TRUNC(W_DAY_D.DAY_DT) RANGE BETWEEN INTERVAL '2' day preceding and INTERVAL '1' day following) AVG_PRICE_PAST
FROM W_PURCH_SCHEDULE_LINE_F,
W_PRODUCT_D, 
W_DAY_D
WHERE
W_PURCH_SCHEDULE_LINE_F.PRODUCT_WID=W_PRODUCT_D.ROW_WID
AND W_PURCH_SCHEDULE_LINE_F.ORDERED_ON_DT_WID=W_DAY_D.ROW_WID

备注:oracle将查找当前采购日期前2天,后2天范围内的记录,并出去单价的avg值。

转载于:https://www.cnblogs.com/fjhh/p/4036618.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL窗口函数可以使用range来指定日期范围。具体语法如下: ``` <窗口函数> OVER ( PARTITION BY <字段名> ORDER BY <字段名> RANGE BETWEEN <日期范围> PRECEDING AND <日期范围> FOLLOWING ) ``` 其,`<日期范围>`可以是以下几种形式之一: - `UNBOUNDED PRECEDING`:表示从窗口的开始到当前行之间的所有行。 - `<n> PRECEDING`:表示从当前行向前数第n行。 - `CURRENT ROW`:表示当前行。 - `<n> FOLLOWING`:表示从当前行向后数第n行。 - `UNBOUNDED FOLLOWING`:表示从当前行到窗口的结束之间的所有行。 例如,如果要计算某个字段在过去7天内的总和,可以使用以下语句: ``` SUM(<字段名>) OVER ( ORDER BY <日期字段> RANGE BETWEEN INTERVAL 7 DAY PRECEDING AND CURRENT ROW ) ``` 这将计算从当前行向前数7天内的字段总和。 #### 引用[.reference_title] - *1* [【数据库】MySQL知识点总结(二):窗口函数](https://blog.csdn.net/be_racle/article/details/125181320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MYSQL窗口函数(Rows & Range)——滑动窗口函数用法](https://blog.csdn.net/WHYbeHERE/article/details/127896098)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL 窗口函数](https://blog.csdn.net/qq_45912025/article/details/125179004)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值