Oracle分析函数-first_value()和last_value()
first_value()和last_value()字面意思已经很直观了,取首尾记录值。
例:查询部门最早发生销售记录日期和最近发生的销售记录日期
select dept_id ,sale_date ,goods_type ,sale_cnt ,first_value(sale_date) over (partition by dept_id order by sale_date) first_value ,last_value(sale_date) over (partition by dept_id order by sale_date desc) last_value from criss_sales;
看结果first_value()很直观,不用多解释
但是,last_value()值,部门D01不是应该为2014/6/12,部门D02不是应该为2014/5/2吗?为什么会每条记录都不一样?
可以这样去理解:last_value()默认统计范围是 rows between unbounded preceding and current row
验证一下:
select dept_id ,sale_date ,goods_type ,sale_cnt ,first_value(sale_date) over (partition by dept_id order by sale_date) first_value ,last_value(sale_date) over (partition by dept_id order by sale_date desc) last_value ,last_value(sale_date) over (partition by dept_id order by sale_date rows between unbounded preceding and unbounded following) last_value_all from criss_sales;
全统计的情况下得到的last_value()值,部门D01为2014/6/12,部门D02为2014/5/2。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步