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相关推荐

  1. mysql first value_开窗函数 First_Value 和 Last_Value

    在Sql server 2012里面,开窗函数丰富了许多,其中带出了2个新的函数 First_Value 和 Last Value .现在来介绍一下这2个函数的应用场景. 首先分析一下First_Va ...

  2. hive中的开窗函数

    目录 count开窗函数 sum开窗函数 min开窗函数 max开窗函数 avg开窗函数 first_value开窗函数 last_value开窗函数 lag开窗函数.lead开窗函数 cume_di ...

  3. 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- ...

  4. oracle之分析函数over及开窗函数

    2019独角兽企业重金招聘Python工程师标准>>> 一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于 ...

  5. 【学习笔记】分析函数(开窗函数)

    分析函数 这里的分析函数也就是我们常说的开窗函数,通常有两类: 一类是聚合开窗函数(SUM.AVG.MAX.MIN.COUNT等), 一类是排序开窗函数(ROW_NUMBER.DENSE_RANK.R ...

  6. Oacle 开窗函数 分析函数

    http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ...

  7. mysql开窗函数over_oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计 ,并且每一组的每一行都可以返回 ...

  8. mysql为何不支持开窗函数?

    引用 在开窗函数出现之前存在着非常多用 SQL 语句非常难解决的问题,非常多都要通过复杂的相关子查询或者存储过程来完毕.为了解决这些问题,在2003年ISO SQL标准增加了开窗函数,开窗函数的使用使 ...

  9. Oracle 开窗函数--转

    oracle的分析函数over 及开窗函数 转自:http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ 一:分析函数ov ...

最新文章

  1. EOS智能合约:system系统合约源码分析
  2. 磁盘 io 的性能指标 简介
  3. 密码学系列之:memory-hard函数
  4. 支持 简体,繁体,英文的js日历控件
  5. 在屏幕上将1234逐位打印出来1,2,3,4
  6. 为防盗装自动门 不想也会影响生活
  7. YOS里面推入AD的命令行生成代码
  8. 聊聊人像抠图背后的算法技术
  9. oracle修改默认值语句,Oracle 常用的修改语句
  10. 多线程----使用线程池爬取二手房信息
  11. java excel 密码,Java 加密、解密Excel文档
  12. 利用js文件获取视频文件详细信息 如帧速率、总比特率等
  13. linux 内核 浮点运算,ARM64与x86_64浮点运算精度比较
  14. 你会给论文正确加引用吗?
  15. 双曲线和直线联立公式_谈直线和双曲线的位置关系之(1)联立方程法
  16. 还在用Windows虚拟机?快来试试Windows自带的Sandbox吧!
  17. 本地项目转git项目的详细操作方法
  18. 使用LATTICE的XO3器件进行调试时,reveal报错“Falied to link signal”怎么解决?
  19. sql 查询子集_如何使用SQL查找最近的子集总和
  20. 作为前端er,写在年末的一些话

热门文章

  1. 一个二维码如何自动识别是安卓(Android)还是苹果(IOS)
  2. 那些年我们踩过的坑,SQL 中的空值陷阱!
  3. 诺瓦科技一面经凉~(嵌入式软件工程师)
  4. Python之plot()与Tk窗体的绑定
  5. 服务器raid模式修改成ide,SkyIAR 2.57 IDE_AHCI_RAID模式修改方案
  6. exsi删除虚拟机提示在当前状况下不允许执行此操作解决方法、vmware删除虚拟机提示在当前状况下不允许执行此操作解决方法
  7. it词汇总结(来自互联网)
  8. [转帖]怎样做研究(刘挺)
  9. 史上最强c++代码——“boost::asio”
  10. 【C#】七层登录机房重构