hive实现根据用户分组,按用户记录求上下两条记录的时间差
在mysql,数据如下:#查询某一用户该日抽奖时间
select draw_time from user_draw_log where user_id = 1 and draw_date='2016-03-09' order by id; +---------------------+ | draw_time | +---------------------+ | 2016-03-09 13:52:46 | | 2016-03-09 13:52:53 | | 2016-03-09 13:53:01 | | 2016-03-09 13:53:13 | | 2016-03-09 13:53:25 | ...
想计算每次抽奖时间之间的间隔 以便判断是否是并发插入 我的方法如下使用一个临时变量记录前一次的抽奖时间
select draw_time, timediff(draw_time,@prev_time) diff,(@prev_time:=draw_time) from user_draw_log where user_id = 1 and draw_date='2016-03-09' order by id; +---------------------+------------------+-------------------------+ | draw_time | diff | (@prev_time:=draw_time) | +---------------------+------------------+-------------------------+ | 2016-03-09 13:52:46 | -00:08:28.000000 | 2016-03-09 13:52:46 | | 2016-03-09 13:52:53 | 00:00:07.000000 | 2016-03-09 13:52:53 | | 2016-03-09 13:53:01 | 00:00:08.000000 | 2016-03-09 13:53:01 | | 2016-03-09 13:53:13 | 00:00:12.000000 | 2016-03-09 13:53:13 | | 2016-03-09 13:53:25 | 00:00:12.000000 | 2016-03-09 13:53:25 | | 2016-03-09 13:53:32 | 00:00:07.000000 | 2016-03-09 13:53:32 | | 2016-03-09 13:53:38 | 00:00:06.000000 | 2016-03-09 13:53:38 | ...
有没更方便的方法实现这一功能呢?对所有用户都求相邻记录时间差该如何操作?
hive做法如下:
1.Hive row_number() 函数的高级用法 row_num 按照某个字段分区显示第几条数据
select imei,ts,fuel_instant,gps_longitude,gps_latitude,row_number() over (PARTITION BY imei ORDER BY ts ASC) as row_num from sample_data_2
2.row_num 是相互连续的,join 自身,然后时间相减可求差
create table obd_20140101 as
select a.imei,a.row_num,a.ts,COALESCE(unix_timestamp(a.ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(b.ts, 'yyyy-MM-dd HH:mm:ss.S') as intervel ,a.fuel_instant,a.gps_speed as obd_speed,a.gps_status,a.gps_longitude,a.gps_latitude,a.direct_angle,a.obdspeed from obddata_20140101 a join obddata_20140101 b on a.imei = b.imei and a.row_num = b.row_num +1
事实上该方法有更加简便的方法,那就是hive的分析窗口函数:
create table obd_20140101 as
select imei,ts as ts1,fuel_instant,gps_longitude,gps_latitude,lead(ts,1,ts) over (PARTITION BY imei ORDER BY ts ASC) as ts2 from sample_data_2;
这样,数据会按imei分组,并按时间排序。接下来的时间相减就简单了。
select a.imei,a.row_num,a.ts,COALESCE(unix_timestamp(a.ts1, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(a.ts2, 'yyyy-MM-dd HH:mm:ss.S') as intervel ,a.fuel_instant,a.gps_speed as obd_speed,a.gps_status,a.gps_longitude,a.gps_latitude,a.direct_angle,a.obdspeed from obddata_20140101 a;
转载于:https://www.cnblogs.com/hd-zg/p/5930536.html
hive实现根据用户分组,按用户记录求上下两条记录的时间差相关推荐
- 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...
- MySQL5.7用group by分组根据组中某个字段的最大值求取那条记录(注意是整条记录)
首先注意,取每组最大的数据和取每组最大的一条记录是两个概念,前者很简单直接分组,max()即可.另外由于我的是5.7.24版本,5.7版本普遍存在一个问题,就是select的字段只能是group by ...
- 【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- oracle数据库中求某行的上一条记录和下一条记录
利用oracle提供的lead.lag 函数来查询已有记录的上一条.下一条记录. 求id=ae2e829ecffd4715a5c163f829c2e0f5的上一条记录和下一条记录 上一条记录的sql ...
- mysql数据库中查询第几条到第几条数据_在 mysql 数据库中,从查询结果的第四条记录开始选取5条记录,下面 sql 语句正确的是( )...
[单选题]同一种货物,在同一线路上或平行线路上作相对方向的运送,而与对方运程的全部或一部分发生重迭交错的运输被称为( ). [多选题]水闸一般由()三部分组成 [单选题]在一个常规的统计表内,非必需包 ...
- Slq怎么样获取首条记录和最后一条记录
sql如何查询表的第一条记录和最后一条记录 方法一:使用top select TOP 1 * from apple;TOP 1 表示表apple中的第一条数据select TOP 1 * from a ...
- sql如何查询表的第一条记录和最后一条记录
问题: sql如何查询表的第一条记录和最后一条记录 方法一:使用top select TOP 1 * from apple;select TOP 1 * from apple order by id ...
- 创客匠人用户分组:用户定向运营,不浪费一滴流量
从2016年知识付费元年至今,知识付费市场一直奔驰在高速道上,用户规模不断扩大. 在知识付费越来越成熟的同时,教培机构.老师等内容创业者也面临着很多问题:让用户买单越来越不容易了.有时候明明已经策划了 ...
- HIve分组查询返回每组的一条记录
select a.lng,a.lat from (select row_number() over ( partition by uid,grid_id) as rnum,weighted_centr ...
最新文章
- Windows Phone 7 Tip (4) -- User Agent
- R语言:求二维变量数学期望
- 财务思维01-财务报表
- pc端js获取当前经纬度_Swiper 免费开源、功能强大的触摸滑动 js 特效插件
- 创建calico网络报错client response is invalid json
- 央行数字货币研究所悄然挂牌 工作人员:已有一段时间
- 从前,有只小仙女叫...
- javascript实现图片轮播_第2章 第9节 JavaScript(四)
- ado.net 查询 小结 c# 1614653302
- spring-data-redis和jedis版本对应问题
- mongodb安装指南 及使用
- 鸟哥Linux 私房菜
- UPF和POWER Domain
- 手持式频谱分析仪怎么选择
- vue结合echarts开发柱状图+折线图合并的图表
- Android 12 灭屏流程(一) Power键灭屏
- 7-4 疯狂星期四!!!!!
- 总结一下m3u8格式相关问题
- 一些面试的SQL题 答案及建表全部齐全!
- 在docker容器中操作es,并给es7.6添加用户鉴权设置密码
热门文章
- FLUSH TABLES WITH READ LOCK 和 LOCK TABLES比较
- c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理
- 克服Dropout缺陷,简单又有效的正则方法:R-Drop
- 视频异常行为检测算法MPN,在多个数据库上达到SOTA
- 减少代码行数就是提高生产力!美国防部研究人员开源低代码量的机器学习框架:ktrain...
- 图像检索新方向,阿里提出区域检索算法|CVPR 2020
- 一行命令搞定图像质量评价
- 近期计算机视觉相关算法竞赛汇总—高额奖金等你来拿!
- 93%程序员都做过的事:来写一个python式的hello world吧
- 万能钥匙也不能解开的wifi?那用Python帮你轻松解决