开窗函数-first_value/last_value
1、开窗函数是什么?
开窗函数用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
2、开窗函数有什么用?
开窗函数的功能本质是聚合,但是相比聚合,开窗函数可以提供的信息更多。
3、first_value/last_value函数
first_value()over(partition by 列名1,列名2 order by 列名1,列名2)是求一组数据的第一个值
|
|
last_value()over(partition by 列名1,列名2 order by 列名1,列名2)是求一组数据的最后一个值
|
first_value用法:
select distinct a.date,a.name,first_value(date)over(partition by name order by date asc)as `每个人对应最早的date`
|
|
,first_value(date)over(partition by name order by date desc)as `每个人对应最晚的date`
|
|
from
|
|
(
|
|
select '张三'as name,'2021-04-11' as date
|
|
union all
|
|
select '李四'as name,'2021-04-09' as date
|
|
union all
|
|
select '赵四'as name,'2021-04-16' as date
|
|
union all
|
|
select '张三'as name,'2021-03-10'as date
|
|
union all
|
|
select '李四'as name,'2020-01-01'as date
|
|
)a
|
|
last_value用法
select distinct a.date,a.name
|
|
,last_value(date)over(partition by name order by date asc)as `每个人对应最晚的date`
|
|
from
|
|
(
|
|
select '张三'as name,'2021-04-11' as date
|
|
union all
|
|
select '李四'as name,'2021-04-09' as date
|
|
union all
|
|
select '赵四'as name,'2021-04-16' as date
|
|
union all
|
|
select '张三'as name,'2021-03-10'as date
|
|
union all
|
|
select '李四'as name,'2020-01-01'as date
|
|
)a
|
|
可以看到使用last_value函数求每个人最后一个日期,结果并不是想要的。那该怎么办呢,查询该函数的具体用法发现:
last_value()默认的统计范围是”rows between unbounded preceding and current row【无界的前面行和当前行之间】”怎么理解呢?见下:
rows between unbounded preceding and current row,可以这么理解: x∈(-∞,X)
|
|
rows between unbounded preceding and unbounded following, x∈(-∞,+ ∞)
|
|
rows between current row and unbounded following, x∈(X,+ ∞)
|
last_value()默认是升序,如果限制了是降序,则等同于first_value()升序
select distinct a.date,a.name
|
|
,last_value(date)over(partition by name order by date rows between unbounded preceding and current row)as `(-∞,X)`
|
|
,last_value(date)over(partition by name order by date rows between unbounded preceding and unbounded following)as `(-∞,+ ∞)`
|
|
,last_value(date)over(partition by name order by date rows between current row and unbounded following)as `(X,+ ∞)`
|
|
from
|
|
(
|
|
select '张三'as name,'2021-04-11' as date
|
|
union all
|
|
select '李四'as name,'2021-04-09' as date
|
|
union all
|
|
select '赵四'as name,'2021-04-16' as date
|
|
union all
|
|
select '张三'as name,'2021-03-10'as date
|
|
union all
|
|
select '李四'as name,'2020-01-01'as date
|
|
)a
|
rows可以换成range,下次再补充
开窗函数-first_value/last_value相关推荐
- mysql first value_开窗函数 First_Value 和 Last_Value
在Sql server 2012里面,开窗函数丰富了许多,其中带出了2个新的函数 First_Value 和 Last Value .现在来介绍一下这2个函数的应用场景. 首先分析一下First_Va ...
- hive中的开窗函数
目录 count开窗函数 sum开窗函数 min开窗函数 max开窗函数 avg开窗函数 first_value开窗函数 last_value开窗函数 lag开窗函数.lead开窗函数 cume_di ...
- hive 开窗函数之lag,lead,first_value,last_value
概念 测试数据 -- 数据准备: 姓名,购买日期,购买数量 saml 2018-01-01 10 saml 2018-01-08 55 tony 2018-01-07 50 saml 2018-01- ...
- oracle之分析函数over及开窗函数
2019独角兽企业重金招聘Python工程师标准>>> 一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于 ...
- 【学习笔记】分析函数(开窗函数)
分析函数 这里的分析函数也就是我们常说的开窗函数,通常有两类: 一类是聚合开窗函数(SUM.AVG.MAX.MIN.COUNT等), 一类是排序开窗函数(ROW_NUMBER.DENSE_RANK.R ...
- Oacle 开窗函数 分析函数
http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ...
- mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())
一.Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计 ,并且每一组的每一行都可以返回 ...
- mysql为何不支持开窗函数?
引用 在开窗函数出现之前存在着非常多用 SQL 语句非常难解决的问题,非常多都要通过复杂的相关子查询或者存储过程来完毕.为了解决这些问题,在2003年ISO SQL标准增加了开窗函数,开窗函数的使用使 ...
- Oracle 开窗函数--转
oracle的分析函数over 及开窗函数 转自:http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ 一:分析函数ov ...
最新文章
- EOS智能合约:system系统合约源码分析
- 磁盘 io 的性能指标 简介
- 密码学系列之:memory-hard函数
- 支持 简体,繁体,英文的js日历控件
- 在屏幕上将1234逐位打印出来1,2,3,4
- 为防盗装自动门 不想也会影响生活
- YOS里面推入AD的命令行生成代码
- 聊聊人像抠图背后的算法技术
- oracle修改默认值语句,Oracle 常用的修改语句
- 多线程----使用线程池爬取二手房信息
- java excel 密码,Java 加密、解密Excel文档
- 利用js文件获取视频文件详细信息 如帧速率、总比特率等
- linux 内核 浮点运算,ARM64与x86_64浮点运算精度比较
- 你会给论文正确加引用吗?
- 双曲线和直线联立公式_谈直线和双曲线的位置关系之(1)联立方程法
- 还在用Windows虚拟机?快来试试Windows自带的Sandbox吧!
- 本地项目转git项目的详细操作方法
- 使用LATTICE的XO3器件进行调试时,reveal报错“Falied to link signal”怎么解决?
- sql 查询子集_如何使用SQL查找最近的子集总和
- 作为前端er,写在年末的一些话
热门文章
- 一个二维码如何自动识别是安卓(Android)还是苹果(IOS)
- 那些年我们踩过的坑,SQL 中的空值陷阱!
- 诺瓦科技一面经凉~(嵌入式软件工程师)
- Python之plot()与Tk窗体的绑定
- 服务器raid模式修改成ide,SkyIAR 2.57 IDE_AHCI_RAID模式修改方案
- exsi删除虚拟机提示在当前状况下不允许执行此操作解决方法、vmware删除虚拟机提示在当前状况下不允许执行此操作解决方法
- it词汇总结(来自互联网)
- [转帖]怎样做研究(刘挺)
- 史上最强c++代码——“boost::asio”
- 【C#】七层登录机房重构