hive 取两次记录的时间差 lead lag first_value last_value
-- LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值
-- 第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)
-- LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值
-- 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)
-- FIRST_VALUE 取分组内排序后,截止到当前行,第一个值
-- LAST_VALUE 取分组内排序后,截止到当前行,最后一个值
-- 这几个函数不支持WINDOW子句 select
t2.id
,t2.day
,t2.lead_default_day
,t2.lead_2_day
,t2.lag_default_day
,t2.lag_2_day
,t2.first_day_1
,t2.first_day_2
,t2.last_day_1
,t2.last_day_2
,(unix_timestamp(t2.lead_default_day)-unix_timestamp(t2.day))/3600 as diff_hour
from (
select
t1.id
,t1.day
,lead(t1.day) over(partition by t1.id order by t1.day) as lead_default_day
,lead(t1.day,1,'2018-01-01 00:00:00') over(partition by t1.id order by t1.day) as lead_2_day
,lag(t1.day) over(partition by t1.id order by t1.day) as lag_default_day
,lag(t1.day,1,'2018-01-01 00:00:00') over(partition by t1.id order by t1.day) as lag_2_day
,first_value(t1.day) over(partition by t1.id order by t1.day) as first_day_1
,first_value(t1.day) over(partition by t1.id) as first_day_2
,last_value(t1.day) over(partition by t1.id order by t1.day) as last_day_1
,last_value(t1.day) over(partition by t1.id) as last_day_2
from (
select 'a' as id, '2018-01-01 12:22:00' as day union all
select 'a' as id, '2018-01-09 00:00:00' as day union all
select 'a' as id, '2018-01-02 00:00:00' as day union all
select 'a' as id, '2018-01-03 00:00:00' as day union all
select 'a' as id, '2018-01-04 00:00:00' as day union all
select 'b' as id, '2018-01-08 00:00:00' as day union all
select 'b' as id, '2018-01-05 00:00:00' as day union all
select 'b' as id, '2018-01-06 00:00:00' as day union all
select 'b' as id, '2018-01-07 00:00:00' as day
) t1
) t2
;
+-----+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+---------------------+--+
| id | day | lead_default_day | lead_2_day | lag_2_day | first_day_1 | first_day_2 | last_day_1 | last_day_2 | diff_hour |
+-----+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+---------------------+--+
| b | 2018-01-05 00:00:00 | 2018-01-06 00:00:00 | 2018-01-06 00:00:00 | 2018-01-01 00:00:00 | 2018-01-05 00:00:00 | 2018-01-05 00:00:00 | 2018-01-05 00:00:00 | 2018-01-08 00:00:00 | 24.0 |
| b | 2018-01-06 00:00:00 | 2018-01-07 00:00:00 | 2018-01-07 00:00:00 | 2018-01-05 00:00:00 | 2018-01-05 00:00:00 | 2018-01-05 00:00:00 | 2018-01-06 00:00:00 | 2018-01-08 00:00:00 | 24.0 |
| b | 2018-01-07 00:00:00 | 2018-01-08 00:00:00 | 2018-01-08 00:00:00 | 2018-01-06 00:00:00 | 2018-01-05 00:00:00 | 2018-01-05 00:00:00 | 2018-01-07 00:00:00 | 2018-01-08 00:00:00 | 24.0 |
| b | 2018-01-08 00:00:00 | NULL | 2018-01-01 00:00:00 | 2018-01-07 00:00:00 | 2018-01-05 00:00:00 | 2018-01-05 00:00:00 | 2018-01-08 00:00:00 | 2018-01-08 00:00:00 | NULL |
| a | 2018-01-01 12:22:00 | 2018-01-02 00:00:00 | 2018-01-02 00:00:00 | 2018-01-01 00:00:00 | 2018-01-01 12:22:00 | 2018-01-01 12:22:00 | 2018-01-01 12:22:00 | 2018-01-09 00:00:00 | 11.633333333333333 |
| a | 2018-01-02 00:00:00 | 2018-01-03 00:00:00 | 2018-01-03 00:00:00 | 2018-01-01 12:22:00 | 2018-01-01 12:22:00 | 2018-01-01 12:22:00 | 2018-01-02 00:00:00 | 2018-01-09 00:00:00 | 24.0 |
| a | 2018-01-03 00:00:00 | 2018-01-04 00:00:00 | 2018-01-04 00:00:00 | 2018-01-02 00:00:00 | 2018-01-01 12:22:00 | 2018-01-01 12:22:00 | 2018-01-03 00:00:00 | 2018-01-09 00:00:00 | 24.0 |
| a | 2018-01-04 00:00:00 | 2018-01-09 00:00:00 | 2018-01-09 00:00:00 | 2018-01-03 00:00:00 | 2018-01-01 12:22:00 | 2018-01-01 12:22:00 | 2018-01-04 00:00:00 | 2018-01-09 00:00:00 | 120.0 |
| a | 2018-01-09 00:00:00 | NULL | 2018-01-01 00:00:00 | 2018-01-04 00:00:00 | 2018-01-01 12:22:00 | 2018-01-01 12:22:00 | 2018-01-09 00:00:00 | 2018-01-09 00:00:00 | NULL |
+-----+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+---------------------+--+
hive 取两次记录的时间差 lead lag first_value last_value的更多相关文章
- Hive 窗口函数LEAD LAG FIRST_VALUE LAST_VALUE
窗口函数(window functions)对多行进行操作,并为查询中的每一行返回一个值. OVER()子句能将窗口函数与其他分析函数(analytical functions)和报告函数(repor ...
- SQLServer 分组查询相邻两条记录的时间差
原文:SQLServer 分组查询相邻两条记录的时间差 首先,我们通过数据库中表的两条记录来引出问题,如下图 以上为一个记录操作记录的表数据.OrderID为自增长列,后面依次为操作类型,操作时间,操 ...
- hive实现根据用户分组,按用户记录求上下两条记录的时间差
在mysql,数据如下:#查询某一用户该日抽奖时间 select draw_time from user_draw_log where user_id = 1 and draw_date='2016- ...
- sql查询两条记录的时间差
今天突然想到了一个需求,即在一张带有id和time字段的表中,查询相邻时间的时间差. 表的记录如下: 表名为wangxin id是一个不重复的字符串,time是一个时间戳. 现在的需求如下: 比如id ...
- Gym 101064 D Black Hills golden jewels 【二分套二分/给定一个序列,从序列中任意取两个数形成一个和,两个数不可相同,要求求出第k小的组合】
D. Black Hills golden jewels time limit per test 2 seconds memory limit per test 256 megabytes input ...
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
- Oracle 取两个表中数据的交集并集差异集合
Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要 ...
- C#两个时间的时间差的方法
今天遇到一问题,计算两个时间的时间差,看网上的写法较为复杂,找到个简单点的,记录下作为自己的总结. 关键函数: DateTime.Subtract 函数解释: 从此实例中减去指定的日期和时间,返回一个 ...
- hive取数时如果遇到这种报错
如果你hive取数时遇到这种报错:ParseException line 1:78 cannot recognize input near '<EOF>' '<EOF>' '& ...
随机推荐
- day18-事务与连接池 3.jdbc中事务操作介绍
那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...
- JSON数据格式简介
---------------siwuxie095 JSON 简介 JSON:JavaScript 对象表示法(JavaScript Objec ...
- SQL语句兼容性规范
一.DDL兼容性规范(防止表结构变更后,原有的SQL执行报错)只能增加字段或修改字段长度(字段长度改大),不能修改字段名字和类型,不能删除字段不能删除表或者修改表名称 二.DML兼容性规范insert ...
- UIScrollView 实现比例缩放
#import "RootViewController.h" @interface RootViewController ()<UIScrollViewDelegate> ...
- 面试题:hibernate第三天 一对多和多对多配置
1.1 一对多XML关系映射 1.1.1 客户配置文件: <?xml version="1.0" encoding="UTF-8"?> <!D ...
- DR客户端一直连接服务器....(6)
DR客户端一直连接服务器....(非未选择网卡)解决方法: 控制面板-->网络和 Internet-->网络连接,打开本地连接(以太网)属性,将IPV4协议前面的对勾去掉,重启DR 这样D ...
- ZROI2018普转提day2t4
传送门 分析 考场上暴力水过好评... 然后我的st表查询似乎是log的,然后log三方跑的比log方快,qwq. 我们发现如果一个区间的最小值就是这个区间的gcd,则这个区间合法.所以我们二分区间长 ...
- Paxos在大型系统中的应用场景
https://timyang.net/distributed/paxos-scenarios/ 在分布式算法领域,有位非常重要的短发叫Paxos,它的重要性有多高呢?Google的Chubby[1] ...
- 《Maven实战》笔记-2-坐标和依赖
一.依赖范围 Maven在编译项目主代码的时候,需要使用一套classpath——编译classpath: 在编译和执行测试的时候,使用另一套classpath——测试classpath: 实际运行M ...
- Spring JDBCTemplate配置使用
一.开发环境 Windows 10 IntelliJ IDEA 2016.1 旗舰版 JDK1.8 二.项目和数据库结构 项目结构: 数据库(MySQL 5.5.39): /* Navicat MyS ...