环境

hive2.x

主要内容

lag函数

应用场景

对某个字段排序,对排序后的结果计算相邻行的差值

模型

diff_age(id string,age int)

("1",10)

("2",30)

("3",100)

中间过程测试

#求相邻id年龄插值

select

id,

age,

lag(age,1,0) over(order by age) as syh

from diff_age

;

-- 结果是全部是Null

select

id,

age,

lag(age,1) over(partition by id order by age) as syh

from diff_age

;

-- 如果上一行没有值,默认值为null

select

id,

age,

lag(age,1) over(order by age) as syh

from diff_age

;

这一段sql和上一段sql的区别是没有加partition by,在网上看到都是加了分区的,这里经过反复测试不加分区才是对的,可能和版本有关系,

有小伙伴在使用这个函数过程中,出现了null问题,可以测试一下

-- 如果上一行没有,则给默认值0

select

id,

age-lag(age,1,0) over(order by age) as nlc

from diff_age

;

lag是可以直接取行数,取不到默认为null,这里给了一个默认值0

lag的用法(字段,向上取几行,取不到给默认值)

这里直接用年龄-取到的值得到年龄差

-- 如果上一行没有,则默认上一行是当前行值

select

id,

age-lag(age,1,age) over(order by age) as nlc

from diff_age

;

这里id=1是没有上一行,默认是就是当前

-- 年龄按顺序排列,求出相邻行年龄差 v1.0

select
    *
from(
    select
        id,
        age,
        age-lag(age,1,age) over(order by age) as nlc
    from diff_age
    )tmp
where nlc != 0
;

这里先计算年龄差,默认值是当前,所以第一行减去第一行是0,再通过子查询过滤

这样做会出现bug,如果后续中出现了0,则都会过滤,但只有第一条不符合

-- 年龄按顺序排列,求出相邻行年龄差 v1.1
select
    id,
    age,
    nlc
from(
    select
        id,
        age,
        age-lag(age,1,age) over(order by age) as nlc,
        row_number() over(order by age) rank
    from diff_age
    )tmp
where rank != 1
;

这里添加了排序字段,因为排序规则是一样的,所以可以认定是按年龄排序结果与序号是一一对应的

在子查询中过滤序号为1,即第一行

hive——lag函数使用相关推荐

  1. Hive lag函数使用注意

    lag函数用来查找先前的值,但是要注意当第一个值查找前一个值时就没有了,这个在实际应用中需要注意,因为取数一般是有一定分区的. 比如取昨天的数求环比,就要确保昨天的数都在取数范围内 select *, ...

  2. Hive LAG函数分析

    含义:LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定, ...

  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. hive SQL实现占比、同比、环比计算(lag函数,lead函数)

    一.数据准备 -- 创建表并插入数据 CREATE TABLE `saleorder` (`order_id` int ,`order_time` date ,`order_num` int ) -- ...

  5. Hive SQL进阶案例(一):使用LAG函数判断日期连续性

    一.LAG函数介绍 LAG函数是一个常用的窗口函数,作用是取当前行之后的数据,即把该列数据向上错位.使用方法如下: LAG(col ,n ,Default) col是字段名称,指明要操作的列,必须指定 ...

  6. hive 日期函数_数据分析面试必备——SQL窗口函数你会了吗?

    之前写过一篇sql的文章,面向基础的sql操作(无眠:数据分析面试必备--SQL你准备好了吗?),目前已经有12000+收藏(收藏是点赞的5倍,你们可真狠心哪),也可以看出众多同学对sql学习的热情. ...

  7. 打怪升级之小白的大数据之旅(六十七)<Hive旅程第八站:Hive的函数>

    打怪升级之小白的大数据之旅(六十七) Hive旅程第八站:Hive的函数 上次回顾 上一章,我们学习了如何对数据进行拆分–分区表与分桶表,使用分区表与分桶表,可以加快我们的查询效率..本章节是Hive ...

  8. Hive(20):Hive的函数之窗口函数

    目录 0. 相关文章链接 1. 窗口函数概述 1.1. 什么是窗口函数 1.2. 窗口函数的功能 1.3. 窗口函数的种类和位置 1.4. 窗口函数说明 2. 聚合窗口函数 3. 排序窗口函数 3.1 ...

  9. HIVE 常用函数总结

    HIVE 常用函数总结 hive 函数比较多,之前总是随用随查,今天把常用的函数总结一下,以后方便查阅. 本文主要涉及以下几个大面: 1.Hive函数介绍以及内置函数查看 内容较多,见<Hive ...

最新文章

  1. Hibernate- 子查询
  2. 2019最新实战!给程序员的7节深度学习必修课,最好还会Python!
  3. node - 非阻塞的异步 IO
  4. python3 nmap 函数简介
  5. 后端接收到信息并返回了但是前端无响应_Bug的噩梦:前端调试必备的7个“大杀器”...
  6. 【Splay】【块状链表】bzoj3223 Tyvj 1729 文艺平衡树
  7. HDU - 5242 Game(树形dp+树链剖分/树上贪心+思维)
  8. h3cIP和TCP抓包分析实验
  9. 应届毕业生,只会抄代码,该怎么办?
  10. 【3D模型分享】柴油机MMZ D-260柴油发动机
  11. 解决iOS 15上图标出现对号的问题
  12. WMS(仓库管理系统)
  13. EXSI6怎么设置虚拟机从光驱启动
  14. 魔方还原神器,有了它,没有还原不了的魔方(15)
  15. uva 1645 count 水题
  16. 有关信息学竞赛的常见问题
  17. 2440开发板,210开发板,imx6开发板和4412开发板选择哪个更好呢?
  18. 基于属性的访问控制(ABAC)定义与思考 ——ABAC的基本概念
  19. 怎样解决张力控制的难点?
  20. 如何打通AD、企业微信、飞书、钉钉等社交账号及内外网应用身份?

热门文章

  1. Matlab中的条件分支
  2. TEXT、TINYTEXT、MEDIUMTEXT、LONGTEXT选择
  3. 修仙录4.2 最终章
  4. 三维点云数据使用Excel表格成散点图看趋势
  5. 网站如何绑定微信公众帐号
  6. 01:bWAPP下载、安装
  7. 对ndarray的操作:一元函数、二元函数、聚合函数、三元函数
  8. 双速率100G QSFP28 LR4光模块的介绍及应用
  9. 【STM32】EXTI
  10. DataWhale基础算法第一次作业---线性回归