SQL 分析函数之KEEP

业务场景:需要在表中查询日期最大所在的行中利率的值。

场景复现:

先制造临时表数据:

WITH bond_yield AS(
SELECT 1 id, '20201012' tradedate , 'a' bond,2.95 yield FROM dual UNION ALL

SELECT 2 id, '20201013' tradedate , 'a' bond,2.85 yield FROM dual UNION ALL

SELECT 3 id, '20201014' tradedate , 'a' bond,2.91 yield FROM dual UNION ALL

SELECT 4 id, '20201015' tradedate , 'a' bond,2.77 yield FROM dual UNION ALL

SELECT 5 id, '20201012' tradedate , 'b' bond,2.32 yield FROM dual UNION ALL

SELECT 6 id, '20201013' tradedate , 'b' bond,2.35 yield FROM dual UNION ALL

SELECT 7 id, '20201014' tradedate , 'b' bond,2.67 yield FROM dual UNION ALL

SELECT 8 id, '20201015' tradedate , 'b' bond,2.39 yield FROM dual  
)

select * from bond_yield

现在要查询日期最大且bond为a的利率的值


SELECT w.bond, MAX(w.yield) KEEP(DENSE_RANK last ORDER BY w.tradedate) yield FROM bond_yield w where w.bond='a' group by bond;

关键字解释:

KEEP

keep的意思就是“保持”,会保持满足括号内条件的记录,用ORDER BY 后自然会有FIRST和LAST了。

DENSE_RANK

DENSE_RANK是排序策略。例如,它会将两个第二名排在第一名之后,之后还是第三名排在第二名之后。

FIRST/LAST

FIRST/LAST就是对数据进行筛选了。这里我们筛选tradedate最大的记录。如果日期是一样的。就需要使用MAX()选取最大的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值