一、排序&去重分析

row_number() over(partititon by col1 order by col2) as rn

也可以用 row_number() over(distributed by col1 sort by col2) as rn

结果:1,2,3,4

注:对于相同值的记录排名不重复row_number会根据顺序计算

rank() over(partititon by col1 order by col2) as rk

结果:1,2,2,4,5

注:对于相同值的记录rank排名会重复,但总数不变

dense_rank() over(partititon by col1 order by col2) as ds_rk

结果:1,2,2,3,4

注:对于相同值的记录dense_rank排名会重复,总数会减少

select
        order_id,
        departure_date,
        row_number() over(partition by order_id order by departure_date) as rn,  -- 直排
        rank() over(partition by order_id order by departure_date) as rk,        -- 并列的,下一个数字会跳过
        dense_rank() over(partition by order_id order by departure_date) as d_rk -- 并列的,下一个数据不会跳过
  from ord_test
 where order_id=410341346
;

运行结果:

二、跨行获取  

lag(col1,n,DEFAULT) over(partition by col1 order by col2) as up
用于统计窗口内往上第n行值,第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

lead(col1,n,DEFAULT) over(partition by col1 order by col2) as down
用于统计窗口内往下第n行值,第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

first_value() over(partition by col1 order by col2) as fv
取分组内排序后,截止到当前行,第一个值

last_value() over(partition by col1 order by col2) as lv
取分组内排序后,截止到当前行,最后一个值

select
       order_id,
       departure_date,
       first_value(departure_date) over(partition by order_id order by add_time)as fv,  -- 取分组内第一条
       last_value(departure_date) over(partition by order_id order by add_time)as lv    -- 取分组内最后一条
  from ord_test
 where order_id=410341346
;

select
       order_id,
       departure_date,
       lead(departure_date,1) over(partition by order_id order by departure_date)as down_1, -- 向下取一级
       lag(departure_date,1) over(partition by order_id order by departure_date)as up_1     -- 向上取一级
  from ord_test
 where order_id=410341346
;

结果截图:

参考:https://www.cnblogs.com/kimbo/p/8445395.html

Hive 的排名和跨行 窗口函数及其使用的更多相关文章

  1. Hive(十)【窗口函数】

    目录 一.定义 窗口函数: 标准聚合函数 分析排名函数 二.语法 (1)窗口函数 over([partition by 字段] [order by 字段] [ 窗口语句]) (2)窗口语句 三.需求练 ...

  2. Hive 分析函数lead、lag实例应用

    Hive的分析函数又叫窗口函数,在oracle中就有这样的分析函数,主要用来做数据统计分析的. Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead) ...

  3. Hive实战—时间滑动窗口计算

    关注公众号:大数据技术派,回复: 资料,领取1024G资料. 目录 时间滑动计算 外部调用实现时间循环 自关联实现滑动时间窗口 扩展基于自然周的的滚动时间窗口计算 总结 时间滑动计算 今天遇到一个需求 ...

  4. sql视图学习笔记--视图

    视图是为用户对数据多种显示需求而创建的,其主要用在一下几种情况: (1)限制用户只能访问特定表特定条件的内容,提高系统的安全性. (2)隐藏表结构.创建多种形式的数透视,满足不同用户需求. (3)将复 ...

  5. oracle sql 语句 示例

    --oracle 用户对象的导入导出 exp devimage/oracle@172.xx.x.xx/TESTDB owner='devimage' file=d:/devimage.dmp log= ...

  6. SQL面试50题

    1.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号(重点) SELECT a.s_id,a.s_score FROM (') as a INNER JOIN (') as b on ...

  7. 【MySQL 基础】MySQ LeetCode

    MySQL LeetCode 175. 组合两个表 题目描述 表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+----- ...

  8. Hive中的窗口函数

    简介 本文主要介绍hive中的窗口函数.hive中的窗口函数和sql中的窗口函数相类似,都是用来做一些数据分析类的工作,一般用于olap分析 概念 我们都知道在sql中有一类函数叫做聚合函数,例如su ...

  9. 【hive】分组求排名

    分组求排名 相信好多使用Mysql的用户一定对分组求排名的需求感到发怵. 但是在hive或者oracle来说就能简单实现. 采用窗口函数:rank() over() / row_number() ov ...

随机推荐

  1. fiddler 实现代理的操作

  2. 基于sendEmail的简单zabbix邮件报警

    一.sendmail和sendEmail区别 sendmail是一款邮件服务器软件(MTA),sendEmail是命令行SMTP邮件客户端(MUA) 二.senEmail安装 下载地址:http:// ...

  3. MongoDB 新建数据库和集合 查询集合

    MongoDB语法是原生ORM,根本不存在sql语句 创建数据库:这里和一般的关系型数据库一样,都要先建立一个自己的数据库空间 新建数据库db1 > use db1 switched to db ...

  4. dedecms前端无法调用自定义变量怎么解决

    网友问ytkah说他的dedecms前端无法调用自定义变量要怎么解决,登录他的网站后台看了一下,自定义变量已经添加了,也写入了数据库表中,但是就是前台没办法调用出来,后面想想可能是文件权限不够,具体是 ...

  5. finecms如何批量替换文章中的关键词?

    Finecms批量替换文章关键词要怎么操作呢,比如把关键词A换为B?Finecms是免费开源无商业限制的内容管理系统,个人在维护,但二次开发很灵活,我们可以通过开发插件或数据库sql语句来操作,下面就 ...

  6. 使用jframe编写一个base64加密解密工具

    该工具可以使用exe4j来打包成exe工具(如何打包自己百度) 先上截图功能 运行main方法后,会弹出如下窗口 输入密文 然后点击解密,在点格式化 代码分享 package tools;import ...

  7. C# 抽象类、抽象属性、抽象方法

    抽象类往往用来表征对问题领域进行分析.设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象. 下面我们以水果为例,首先定义抽象类Fruit,抽象类中有公共属性vendor,抽象属 ...

  8. iOS UI基础-16.0 UIButton

    回归自然,UIButton是我们使用最频烦的一个控件.下面,对该控件的一些常用方法进行一些总结. UIButton *payStateBtn = [UIButton buttonWithType:UI ...

  9. ANTLR4权威指南 - 第5章 设计语法

    在第I部分,我们熟悉了ANTLR,并在一个比较高的层次上了解了语法以及语言程序.现在,我们将要放慢速度来学习下实现更实用任务的一些细节上的技巧,例如建立内部数据结构,提取信息,生成输入对应的翻译内容等 ...

  10. Java第一次考试作业

    这次考试感觉自己充分的意识到自己的不足,对于Java没有系统的理解,敲程方面也有很大问题,本次程序题目为ATM机的账户记录Account有账户的唯一性标识,用户的姓名,操作日期(Date),操作类型, ...